python导出项目下依赖包
一、如果需要导出 当前环境 所有依赖库,则使用这条命令即可
pip freeze > requirements.txt
(一般用于虚拟环境导出,对项目而已多数存在冗余依赖库)
二、如果需要导出 当前项目 所有依赖包,则需要用到 pipreqs
2-1、安装依赖包
pip install pipreqs
(注意:要在管理员权限下安装,否则容易出现无法启用的情况)
2-2、导出requirements.txt文件(要花很长时间)
通用语句
pipreqs . --encoding=utf-8 --force
也可以自定义多种参数
pipreqs ./ --ignore ./pipeflow --pypi-server https://pypi.tuna.tsinghua.edu.cn/simple/ --encoding utf-8
如图提示Successfully saved requirements file in ./requirements.txt 则成功
requirements.txt效果图
Flask==2.2.2
pika==1.2.0
requests==2.27.1
SQLAlchemy==1.4.35
2-3、命令选参
其中pipreqs后面各跟命令含义如下
1、pipreqs后面 直接跟 “目标路径” 【必填】
在当前项目目录则用 .
也可以用绝对路径,注意绝对路径有空格要用""包起来
2、--savepath <string> 结果保存文件 【没必要设置】
默认当前目录下requirements.txt
3、--encoding <string> 编码方式 【建议设置】
默认自动,建议使用 utf-8 保证文件解码正确
4、--force 强制的
默认否。若设置此项,当结果文件存在时直接覆盖。
5、--proxy <string> 代理 【不建议设置】
默认不用代理。建议通过--pypi-server指定镜像,就没必要用不稳定的代理了。
6、--pypi-server <string> 指定pip镜像源 【国内建议设置】
默认https://pypi.python.org/pypi/ ,在外网还挺快,在国内还是建议指定 https://pypi.tuna.tsinghua.edu.cn/simple/ 提高检索速度。
当然也可以指定自己喜欢的“pip镜像源”
7、--mod <compat | gt | no-pin> 输出模式
默认 全等模式,例如 requests==2.27.1
compat 比较近似于,例如 requests~=2.27.1
gt 最低要求,例如 requests>=2.27.1
no-pin 无限制, 例如 requests
8、--ignore 忽略的路径(用 , 分割多个路径)
当一个git项目包含子git项目时建议设置此项。
9、--use-local 仅使用本地包【不建议设置】
10、--print 打印结果【没必要设置】
默认不展示,直接打开结果文件结果看即可。若设置此项则允许在命令行预览
————————————————(如果没有异常,就不需要往下看了)————————————————————————————
异常处理
一、有些用户会出现 'gbk' codec can't decode byte 的异常
(图片转自其他同事出现的问题)
①首先建议是升级pipreqs。旧版会有无法指定编码格式的情况,新版不会有。当前博主版本是 pipreqs==0.4.11
pipreqs依赖库少,一般不影响正式环境,可以放心升级。(升级后需要关闭窗口再重新执行pipreqs命令)
②(如果①完还是有这异常,)则改代码
找到pipreqs.py文件。一般在 Python39\Lib\site-packages\pipreqs 下,根据实际安装方式定位。
如果你不是用管理员安装的,则可能在 C:\Users\[当前用户名]\AppData\Roaming\Python\Python39\site-packages\pipreqs 下。
把114行的 open(file_name, "r", encoding=encoding) 改为 open(file_name, "r", encoding="utf-8")
把205行的 open(item, "r", encoding=encoding) 改为 open(item, "r", encoding="utf-8")
(不同版本可能有差异,但就是找这两句话就对了)改完重新运行即可
二、有些仓库会出现 red('!!!MUST SET MODULE in the fabfile.py')
这是因为 有import依赖包在pip镜像库或本地无法被定位。
首先,要检测自己代码是否存在import错误了。pipreqs检查的"项目下所有py文件"!而python是"先跑,跑到异常再说"。
然后,检测镜像库,看下是否缺失对应依赖包。一般这异常出现在 跨平台 的项目中。可以用--ignore排除跨平台调用的文件。
例如我的 pipreqs ./ --ignore ./pipeflow
转载请注明出处: https://my.oschina.net/jacky326/blog/6345424