Python项目生成依赖文件

写在前面

在完成Python项目时,我们一般需要编写一个requirements.txt文件,该文件包含了项目所依赖的库的名称和版本号,方便后续部署项目。但是如果项目使用了较多的第三方库,手动编写该文件会非常麻烦,这时我们可以借助一些工具来自动生成该文件。本文介绍了几种常用的自动生成依赖文件的方法。

1. pip freeze

Python的 pip 包管理工具提供了 freeze 命令,可以将当前环境中安装的包信息写入 requirements.txt 文件。

该命令会将所有安装的包都写入requirements.txt文件,包括系统自带的包和第三方包的依赖包。如果项目中有有第三方包依赖了很多其他的第三方包,那么这些依赖包都会列出来,不利于包管理。

1
pip freeze > requirements.txt

或者

1
python -m pip freeze > requirements.txt

推荐使用第二种方式,使用python调用而不是直接调用pip命令,因为第一种方式可能会出现版本冲突或者其他问题。

生成完后,可能还需要修改和删除里面不必要的安装包。因为很多安装包都是有依赖的,我们把要的留下就可以了。

2. pipreqs

pipreqs 是一个自动生成 requirements.txt 文件的工具,它会自动分析项目中的导入语句,然后生成一个 requirements.txt 文件。
此方法生成的 requirements.txt 文件会自动排除系统自带的包和第三方包的依赖包,但是速度较慢,在使用虚拟环境时可能会出现问题。

1
pip install pipreqs

然后在项目目录下运行:

1
pipreqs .

可选参数:--force强制重新生成,--upgrade更新库的版本号。

3. poetry

如果你使用 Poetry 管理项目,那么可以使用 Poetry 的 export 命令生成 requirements.txt 文件。

1
pip install poetry
1
poetry export --format requirements.txt --output requirements.txt --without-hashes

这个命令将从 poetry.lock 文件中生成一个标准的 requirements.txt 文件,其中包含项目的所有依赖项及其版本信息。--without-hashes 选参数表示不在 requirements.txt 文件中包含安装包时的哈希信息,这样可以使得 requirements.txt 文件更容易被共享。
如果只想生成开发环境的依赖(例如测试依赖),可以使用以下命令:

1
poetry export --dev --format requirements.txt --output requirements.txt --without-hashes

不过在使用 Poetry 时,最好使用 poetry.lock 文件而不是 requirements.txt 文件来确保安装相同版本的依赖项。poetry.lock 包含了更详细的依赖关系和版本信息。

4. pipenv

pipenv 是一个包含了pipvirtualenv并补全了两者一些不足之处的包管理工具,可以帮助我们管理Python项目的依赖,和 Poetry 类似,它也生成 requirements.txt 文件。

1
pip install pipenv

然后在项目目录下运行:

1
pipenv lock -r > requirements.txt

这将从 Pipfile.lock 中生成 requirements.txt 文件。

5. PyCharm

在PyCharm中,提供了一个生成requirements.txt文件的功能,可以准确迅速地生成依赖文件。

具体位置:Tools -> Sync Python Requirements