Python 通过pipreqs一键生成项目(脚本)依赖包清单requirements.txt,再根据依赖包清单一次性安装所依赖的包

其他参考:

https://zhuanlan.zhihu.com/p/89756247  Python 依赖库管理:pipreqs、pigar、pip-tools、pipdeptree

https://blog.csdn.net/python122_/article/details/137861287  最强解释!Python 包的依赖管理,有解了!

 

Python 通过pipreqs一键生成项目(脚本)依赖包清单requirements.txt,再根据依赖包清单一次性脚本安装所依赖的包

 

Python 依赖库管理工具有哪些

pipreqs

这是个很受欢迎的用于管理项目中依赖库的工具,可以用“pip install pipreqs”命令来安装。它的主要特点有:

  • 搜索依赖库的范围是基于目录的方式,很有针对性
  • 搜索的依据是脚本中所 import 的内容
  • 可以在未安装依赖库的环境上生成依赖文件
  • 查找软件包信息时,可以指定查询方式(只在本地查询、在 PyPi 查询、或者在自定义的 PyPi 服务)

pigar

pigar 同样可以根据项目路径来生成依赖文件,而且会列出依赖库在文件中哪些位置使用到了。这个功能充分利用了 requirements.txt 文件中的注释,可以提供很丰富的信息。

pigar 对于查询真实的导入源很有帮助,例如bs4 模块来自beautifulsoup4 库,MySQLdb 则来自于MySQL_Python 库。可以通过“-s”参数,查找真实的依赖库。

pigar -s bs4 MySQLdb

它使用解析 AST 的方式,而非正则表达式的方式,可以很方便地从 exec/eval 的参数、文档字符串的文档测试中提取出依赖库。

 

pip-tools

pip-tools 包含一组管理项目依赖的工具:pip-compile 与 pip-sync,可以使用命令“pip install pip-tools”统一安装。它最大的优势是可以精准地控制项目的依赖库。

 

pipdeptree

它的主要用途是展示 Python 项目的依赖树,通过有层次的缩进格式,显示它们的依赖关系,不像前面那些工具只会生成扁平的并列关系。

 

pipreqs使用

pip install pipreqs
pipreqs .                                   // 使用pipreqs 生成的依赖包清单
pip install -r requirements.txt  // 根据依赖包清单批量安装包

 

安装pipreqs

$ pip install pipreqs
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting pipreqs
  Downloading http://mirrors.aliyun.com/pypi/packages/d9/ea/74c89d786cf3403bfbf8fb70142fdf501af9517d0bb8c1acce3ee5ab613e/pipreqs-0.4.13-py2.py3-none-any.whl (33 kB)
Collecting docopt (from pipreqs)
  Downloading http://mirrors.aliyun.com/pypi/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz (25 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Collecting yarg (from pipreqs)
  Downloading http://mirrors.aliyun.com/pypi/packages/6c/98/63ca46066218f5438e47db7149a515b80b77bdeb30e3644da6221dac43dc/yarg-0.1.10-py2.py3-none-any.whl (13 kB)
Requirement already satisfied: requests in d:\6.commontools\python379\lib\site-packages (from yarg->pipreqs) (2.27.1)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in d:\6.commontools\python379\lib\site-packages (from requests->yarg->pipreqs) (1.26.9)
Requirement already satisfied: certifi>=2017.4.17 in d:\6.commontools\python379\lib\site-packages (from requests->yarg->pipreqs) (2021.10.8)
Requirement already satisfied: charset-normalizer~=2.0.0 in d:\6.commontools\python379\lib\site-packages (from requests->yarg->pipreqs) (2.0.12)
Requirement already satisfied: idna<4,>=2.5 in d:\6.commontools\python379\lib\site-packages (from requests->yarg->pipreqs) (3.3)
Building wheels for collected packages: docopt
  Building wheel for docopt (pyproject.toml) ... done
  Created wheel for docopt: filename=docopt-0.6.2-py2.py3-none-any.whl size=13774 sha256=f36bdc62da32d490f8b9b37a7d879ea0b54808e43c768d419883aaf3ecc09c19
  Stored in directory: c:\users\zzzz\appdata\local\pip\cache\wheels\d7\ae\81\7cffcc3431dcbcdbc9e17a978f7e41b03edb84ccf473bab293
Successfully built docopt
Installing collected packages: docopt, yarg, pipreqs
Successfully installed docopt-0.6.2 pipreqs-0.4.13 yarg-0.1.10

 

pipreqs 运行时报错

错误1:编码问题

UnicodeDecodeError: 'gbk' codec can't decode byte 0x88 in position 353: illegal multibyte sequence

$ pipreqs ./
Traceback (most recent call last):
  File "d:\6.commontools\python379\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "d:\6.commontools\python379\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\6.CommonTools\Python379\Scripts\pipreqs.exe\__main__.py", line 7, in <module>
  File "d:\6.commontools\python379\lib\site-packages\pipreqs\pipreqs.py", line 528, in main
    init(args)
  File "d:\6.commontools\python379\lib\site-packages\pipreqs\pipreqs.py", line 458, in init
    follow_links=follow_links)
  File "d:\6.commontools\python379\lib\site-packages\pipreqs\pipreqs.py", line 115, in get_all_imports
    contents = f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0x88 in position 353: illegal multibyte sequence

解决方法:

pipreqs ./ --encoding=utf8

 

示例:

$ pipreqs ./ --encoding=utf8
INFO: Successfully saved requirements file in ./requirements.txt

 

错误2:python 3环境运行python2的脚本原因

SyntaxError: Missing parentheses in call to 'print'. Did you mean print("write xml :"+out_path)?

$ pipreqs ./ --encoding=utf8
ERROR: Failed on file: ./main.py
Traceback (most recent call last):
  File "d:\6.commontools\python379\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "d:\6.commontools\python379\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\6.CommonTools\Python379\Scripts\pipreqs.exe\__main__.py", line 7, in <module>
  File "d:\6.commontools\python379\lib\site-packages\pipreqs\pipreqs.py", line 528, in main
    init(args)
  File "d:\6.commontools\python379\lib\site-packages\pipreqs\pipreqs.py", line 458, in init
    follow_links=follow_links)
  File "d:\6.commontools\python379\lib\site-packages\pipreqs\pipreqs.py", line 131, in get_all_imports
    raise exc
  File "d:\6.commontools\python379\lib\site-packages\pipreqs\pipreqs.py", line 117, in get_all_imports
    tree = ast.parse(contents)
  File "d:\6.commontools\python379\lib\ast.py", line 35, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 43
    print "write xml :"+out_path
                      ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("write xml :"+out_path)?

 

posted @ 2025-06-10 08:34  行走的思想  阅读(198)  评论(0)    收藏  举报