有时我从github下载python源代码,不知道如何安装所有的依赖项。如果没有requirements.txt文件,我必须手工创建它。 问题是: 给定python源代码目录,是否有可能从导入部分自动创建requirements.txt ?
当前回答
你可以使用下面的代码来生成一个requirements.txt文件:
pip install pipreqs
pipreqs /path/to/project
更多有关pipreqs的信息可以在这里找到。
有时您会遇到pip冻结,但这会保存环境中的所有包,包括那些您在当前项目中不使用的包。
其他回答
这不是一个完整的解决方案,但可能有助于在Linux上编译一个候选列表。
grep --include='*.py' -rhPo '^\s*(from|import)\s+\w+' . | sed -r 's/\s*(import|from)\s+//' | sort -u > requirements.txt
因为大多数使用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
或者如果你使用的是virtualenv,你可以运行这个命令来生成一个requirements.txt
$ ./.venv/bin/pip freeze > requirements.txt
你可以用命令来做。它将创建requirements .txt并自动添加相关模块。
For Unix : pip3 freeze > requirements.txt
For Windos: pip freeze > requirements.txt
使用pip freeze > requirements.txt创建需求文件是一种糟糕的方式!它可以作为你的问题的临时解决方案,但当管理python项目的需求时,最好手动完成。
简单地搜索“import”或“from x import”,就会给出需要安装的所有依赖项的列表(没有其他内容)。
pip冻结的问题是,它只是简单地转储所有安装的严格版本的包,每个依赖项都有自己的依赖项,它们都包含在转储中。 例如,你已经安装了lib==1.0,这需要sub-lib==0.5,如果你使用pip freeze,你会得到两者,但后来当你希望将lib版本更新到2.0时,很可能你会得到冲突,因为lib v2.0现在使用sub-lib v1.0,而不是你需要的v0.5…对于多个依赖项,这很快就变得复杂起来。
我们在几个项目中遇到了这些问题,从那时起,我创建了一个自动脚本来清理pip freeze的转储,它是安全的(注释不需要的依赖项),工作很棒。
推荐文章
- 使用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多索引转换为列