Python如何只导出当前Python文件所需模块包依赖?
之前在Python虚拟环境使用文章我分享过使用pip freeze导出当前虚拟环境的模块,但是有时候我们写的脚本只需要导出单个文件或者项目目录不是整个虚拟环境的时候,就不行了;
如果只需要导出当前Python文件所需模块包依赖我们可以使用pipreqs模块,下面是pipreqs的使用方法和经验分享:
安装pipreqs库
pip install pipreqs
使用豆瓣源进行安装(PS:理论上来说 使用国内源会更快安装,但是我使用豆瓣源安装pipreqs的时候却两次都卡主,不是报错,而是卡主,原因未知,所以具体自己看情况,如果卡主可以直接安装,而不使用豆瓣源)
pip install pipreqs -i https://pypi.douban.com/simple
GitHub地址:https://github.com/bndr/pipreqs
本人实测(系统win11 安装后请重启下 不然好像无法导出(提取到的依赖模块为空))
导出当前Python脚本文件依赖
pipreqs --print /path/to/your/python/file.py
# 把/path/to/your/python/file.py替换为你的Python文件路径
上述命令将打印你输入Python文件的项目依赖模块,如果需要保存为requirements.txt的文件,则使用下面命令:
pipreqs --print /path/to/your/python/file.py > requirements.txt
# 把/path/to/your/python/file.py替换为你的Python文件路径
成功后将提示:INFO: Successfully output requirements
导出一个目录的依赖
安装完成后,进入你所需要导出的Python文件依赖所在的目录,并执行以下命令:
pipreqs .
这命令会直接在当前目录生成一个名为requirements.txt的文件,其中包含了当前Python文件所需的所有模块及其版本信息。
执行上面命令,pipreqs库会分析整个目录中的Python文件,并生成包含所有文件所需模块的requirements.txt文件。如果你想用这个方法导出当前文件所需的模块,也可以将文件移动到一个单独的目录中,然后在该目录中执行上述命令。
可能遇见的错误解决
UnicodeDecodeError
如果提示:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xab in position 58: illegal multibyte sequence。可以在导出的命令上加入 –encoding指定文件编码,例如:
pipreqs . --encoding=utf-8
命令不识别 – 无法将“pipreqs”项识别为…
这个错误我并没遇见,但是找资料的时候顺带看见了别人的笔记,就一起整理分享了,设置步骤更加清晰,对小白更友好。
错误提示代码:
PS D:\python\*****> pipreqs ./
pipreqs : 无法将“pipreqs”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路
径正确,然后再试一次。
所在位置 行:1 字符: 1
+ pipreqs ./
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (pipreqs:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
问题原因:
pipreqs没有纳入环境变量
解决办法:
通过”pip3 show -f pipreqs”,找到python的Scripts目录(你也可以通过其他方法找到Scripts目录,可以尝试问chatgpt或许可以得到更简单的办法):
PS D:\python\****> pip3 show -f pipreqs
Name: pipreqs
Version: 0.4.10
Summary: Pip requirements.txt generator based on imports in project
Home-page: https://github.com/bndr/pipreqs
Author: Vadim Kravcenko
Author-email: vadim.kravcenko@gmail.com
License: Apache License
Location: c:\users\###\appdata\roaming\python\python39\site-packages
Requires: yarg, docopt
Required-by:
Files:
..\Scripts\pipreqs.exe
pipreqs-0.4.10.dist-info\AUTHORS.rst
pipreqs-0.4.10.dist-info\INSTALLER
pipreqs-0.4.10.dist-info\LICENSE
pipreqs-0.4.10.dist-info\METADATA
pipreqs-0.4.10.dist-info\RECORD
pipreqs-0.4.10.dist-info\REQUESTED
pipreqs-0.4.10.dist-info\WHEEL
pipreqs-0.4.10.dist-info\entry_points.txt
pipreqs-0.4.10.dist-info\top_level.txt
pipreqs\__init__.py
pipreqs\__pycache__\__init__.cpython-39.pyc
pipreqs\__pycache__\pipreqs.cpython-39.pyc
pipreqs\mapping
pipreqs\pipreqs.py
pipreqs\stdlib
通过 Location: c:\users****\appdata\roaming\python\python39\site-packages, ..\Scripts\pipreqs.exe,这两条得出Scripts目录路径为:c:\users\###\appdata\roaming\python\python39\Scripts,把这个路径写入系统变量=》Path条目中,
设置变量路径流程:此电脑》右键》属性》高级系统设置》环境变量》系统变量》Path》编辑》新建》加入得到的Scripts路径。可以解决命令不识别问题。