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)?

浙公网安备 33010602011771号