我们可以在requirements.txt
中使用环境标记或
需求说明符。例如,仅当 python 版本低于 2.7 时,
argparse;python_version<"2.7"
才会告诉 pip 安装 argparse
。
但是,使用
pip freeze > requirements.txt
时是否可以生成这些环境标记? pip freeze 的文档没有提到一种方法。我尝试了 -r
选项,但没有成功。 requirements.txt
之后我们还需要手动编辑pip freeze
文件吗?
pip
不能这样做; pip freeze
仅列出所有当前安装的软件包。您直接安装的所有软件包及其所有递归依赖项。由于 pip
不知道哪些包很重要,因此不会过滤列表。由于 pip
不知道哪些环境标记很重要,因此不会添加任何标记,而且很可能永远不会添加。
当前该领域的最佳实践是:维护一个直接的顶级需求列表。您手动维护它,没有任何工具可以提供帮助。并且您定期将所有已安装软件包的列表冻结到不同的文件中。
关于如何命名这些文件,有两所学校。一所学校教您手动维护
requirements.in
并冻结到 requirements.txt
。另一个说你手动维护requirements.txt
并冻结到requirements.lock
。
除了
pip freeze
之外,还有许多工具可以帮助您冻结不同格式的软件包列表并将它们恢复(即重新安装)到新的空虚拟环境中。我建议您看看 poetry
和 pip-tools。
个人说明:对于大型项目,我手动维护两(两)个需求列表:开发和生产。为了避免重复,开发文件包括使用
-r requirements.txt
的生产文件。请参阅https://pip.pypa.io/en/stable/reference/requirements-file-format/