有时我从github下载python源代码,不知道如何安装所有的依赖项。如果没有requirements.txt文件,我必须手工创建它。 问题是: 给定python源代码目录,是否有可能从导入部分自动创建requirements.txt ?
当前回答
在我的例子中,我使用Anaconda,所以在我的环境中从conda终端运行以下命令解决了这个问题,并自动为我创建了这个requirements.txt文件:
conda list -e > requirements.txt
这是从这个Github链接pratos/condaenv.txt
如果看到错误,并且您正在使用anaconda,请尝试使用.yml选项:
conda env export > <environment-name>.yml
供其他人使用该环境,或者如果您正在另一台机器上创建新环境:
conda env create -f <environment-name>.yml
.yml选项在这里找到
其他回答
自动更新requirements.txt的方法
在使用requirements.txt开发python应用程序时,我们有几个选择:
在开发完成后,当我们想要部署它时,生成requirements.txt。它由pip freeze > requirements.txt或pipreqs执行,以减少混乱的结果。 在每次安装后手动将每个模块添加到requirements.txt中。 安装管理器,它将为我们处理requirements.txt更新。
1-st选项有很多答案,2-d选项不言自明,所以我想描述3-d方法。有一个叫做to-requirements.txt的库。要安装它,输入以下命令:
pip install to-requirements.txt # Pip install to requirements.txt
如果你一次阅读整个命令,你就会明白它是做什么的。安装后,您应该安装它。运行:
requirements-txt setup
它覆盖pip脚本,以便每个pip安装或pip卸载都自动使用所需版本的包更新项目的requirements.txt文件。重写是安全的,因此卸载此包后pip将正常运行。
你可以自定义它的工作方式。例如,全局禁用它,只在需要的目录中激活它,只在git存储库中激活它,或者允许/不允许创建requirements.txt文件(如果它不存在)。
链接:
文档- https://requirements-txt.readthedocs.io/en/latest/ GitHub - https://github.com/VoIlAlex/requirements-txt PyPI - https://pypi.org/project/to-requirements.txt/
我盲目地遵循公认的使用答案 Pip3冻结> requirements.txt
它生成了一个巨大的文件,其中列出了整个解决方案的所有依赖项,这不是我想要的。
因此,您需要弄清楚您试图生成什么样的requirements.txt。
如果您需要一个包含所有依赖项的requirements.txt文件,那么可以使用pip3
pip3 freeze > requirements.txt
但是,如果您想生成一个最小的requirements.txt,它只列出您需要的依赖项,那么可以使用pipreqs包。如果您在项目中的每个组件级别都有大量的requirements.txt文件,而在解决方案范围级别上没有一个文件,那么这将特别有用。
pip install pipreqs
pipreqs [path to folder]
e.g. pipreqs .
pipreqs . --force --ignore=tests (Overwrites exisiting requirements.txt, ignores the tests directory)
首先,你的项目文件必须是一个py文件,这是直接的python文件。如果你的文件是ipynb格式,你可以使用下面的代码行将它转换为py类型:
jupyter nbconvert --to=python
然后,您需要从cmd (mac终端)安装pipreqs库。
pip install pipreqs
现在我们可以使用下面的代码创建txt文件。如果你和你的文件在同一路径,你可以写。/。否则,你需要给你的文件路径。
pipreqs ./
or
pipreqs /home/project/location
这将为您的项目创建一个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的转储,它是安全的(注释不需要的依赖项),工作很棒。
这不是一个完整的解决方案,但可能有助于在Linux上编译一个候选列表。
grep --include='*.py' -rhPo '^\s*(from|import)\s+\w+' . | sed -r 's/\s*(import|from)\s+//' | sort -u > requirements.txt