有时我从github下载python源代码,不知道如何安装所有的依赖项。如果没有requirements.txt文件,我必须手工创建它。 问题是: 给定python源代码目录,是否有可能从导入部分自动创建requirements.txt ?


当前回答

简单的python方式

要获得标准REQUIREMENTS .txt文件中所有REQUIREMENTS的列表,您可以使用以下命令。

pip freeze > requirements.txt

现在,这将自动创建一个标准需求文件,其中包含安装在相应版本旁边的所有包。

终端打印精美

如果你只是想在终端上得到一个漂亮的打印,你可以使用下面的方法。

pip list

它以漂亮的打印格式列出了所有已安装的包。

自定义的依赖

如果你有一个项目文件夹,比如Github Repo,你想为项目获得一个自定义的requirements.txt,你可以使用下面的包。 https://pypi.org/project/pipreqs/ pipreqs

使用

$ pipreqs /home/project/location
Successfully saved requirements file in /home/project/location/requirements.txt

requirements.txt的内容

wheel==0.23.0
Yarg==0.1.9
docopt==0.6.2

其他回答

自动更新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/

你可以使用下面的代码来生成一个requirements.txt文件:

pip install pipreqs

pipreqs /path/to/project

更多有关pipreqs的信息可以在这里找到。

有时您会遇到pip冻结,但这会保存环境中的所有包,包括那些您在当前项目中不使用的包。

如果你只想列出在virtualenv中使用的包,请使用:

pip freeze -l > requirements.txt 

确保为python3.7运行pip3。

pip3 freeze >> yourfile.txt

在执行上述命令之前,请确保您已经创建了一个虚拟环境。

python3:

pip3 install virtualenv
python3 -m venv <myenvname> 

python2:

pip install virtualenv
virtualenv <myenvname>

然后将源代码放入该目录。如果你现在运行python文件,如果你使用的是非本地模块,它可能不会启动。您可以通过运行pip3 install <module>或pip install <module>来安装这些模块。

除了您所处的环境外,这不会影响整个模块列表。

现在您可以执行顶部的命令,现在您就有了一个需求文件,其中只包含您在虚拟环境中安装的模块。现在可以在顶部运行命令。

我建议每个人都使用环境,因为当涉及到这样的事情时,它会让事情变得更容易。

这个简单的任务在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