有时我从github下载python源代码,不知道如何安装所有的依赖项。如果没有requirements.txt文件,我必须手工创建它。 问题是: 给定python源代码目录,是否有可能从导入部分自动创建requirements.txt ?
当前回答
这个简单的任务在Python中如此复杂,真是令人惊叹。下面是我认为最好的自动完成的方法。
你需要两个工具:
1. pipreqs
Pip3安装pipreqs
Pipreqs会检查你的项目,只安装项目使用的包。而不是像pip freeze那样在python环境中执行所有包。
但这种方法有一个问题。它不安装子包。
例如,您的项目使用pandas==1.3.2。Pandas本身在其他包中使用numpy==1.21.2。但是pipreqs本身并不在requirements .txt中编写子包(即numpy)
这就是您需要将pipreqs与第二个工具结合使用的地方。
pip-tools
Pip3安装pip-tools
Pip-tools将接受需求中的包。并生成带有所有子包的requirements.txt。例如,如果你有 Pandas ==1.3.2的需求。在,pip-tools将生成
Numpy ==1.21.2 # via pandas in requirements.txt。
但是您需要手动在requirements.in中添加包。这很容易出错,你可能会偶尔忘记这样做。
在这里可以使用第一个工具。
但是这两个工具都是根据requirements.txt编写的。那么如何解决这个问题呢?
使用pipreqs的——savepath来写入需求。,而不是默认的requirements.txt。
一次命令就完成;只做
pipreqs——savepath =需求。在&& pip-compile
好了。现在您不需要担心手动维护包,并且您的requirements.txt将包含所有子包,因此您的构建是确定的。
博士TL;
Pip3安装pipreqs Pip3安装pip-tools
使用下面的代码构建确定性的requirements.txt
pipreqs——savepath =需求。在&& pip-compile
其他回答
Python 3的最佳方式是:
pip3 freeze > requirements.txt
这对我很管用……
你可以使用下面的代码来生成一个requirements.txt文件:
pip install pipreqs
pipreqs /path/to/project
更多有关pipreqs的信息可以在这里找到。
有时您会遇到pip冻结,但这会保存环境中的所有包,包括那些您在当前项目中不使用的包。
创建requirement.txt:
对于Python 3版本命令为:
pip3 freeze > requirements.txt
对于Python 2版本命令为:
pip freeze > requirements.txt
让安装:
对于Python 3版本命令为:
pip3 install -r requirements.txt
对于Python 2版本命令为:
pip install -r requirements.txt
我创建了这个bash命令。
for l in $(pip freeze); do p=$(echo "$l" | cut -d'=' -f1); f=$(find . -type f -exec grep "$p" {} \; | grep 'import'); [[ ! -z "$f" ]] && echo "$l" ; done;
因为大多数使用pipreqs的答案对我来说都不管用。以下是我的答案。
生成requirements.txt文件:
pip install pipreqs
python -m pipreqs.pipreqs --encoding utf-8 /path/to/project
我更喜欢使用pipreqs而不是pip freeze,因为pip freeze保存了环境中的所有包,包括那些在当前项目中不使用的包。但是,pipreqs只保存您在项目中使用的那些。
安装需求使用:
pip3 install -r requirements.txt
推荐文章
- 使用Pandas将列转换为行
- 从matplotlib中的颜色映射中获取单个颜色
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列