创建一个不包含开发依赖的 requirements.txt 文件

5
在开发中,通常需要安装其他包,我已经在我的venv中安装了这些包,但与其他我也安装在venv中的包不同,在生产中并不需要它们。怎样才能最简单地生成一个requirements.txt文件,其中包含除仅在开发中需要的包(如mypyautopep8)之外的所有依赖?
这个答案展示了如何实现,但是这种方法非常繁琐。

使用requirements.txt的主要目的是在virtualenv中使用它,该文件包含所有依赖项。您想知道如何在virtualenvvenv之外使用它吗?请参阅此链接 - de_classified
@FishingCode 我想知道如何管理两个venv(以及使用pip freeze创建的结果requirements.txt),一个用于生产,另一个用于开发,其中包含额外的软件包。 - capek
你可以考虑创建两个 requirements.txt 文件,一个用于生产环境,另一个用于开发环境(包含更多的软件包),并创建一些逻辑来确定哪个 virtualenv 应该运行哪个 requirements.txt。你可以使用 .bat 文件来实现这一点,如果需要不同的 Python 版本,也可以添加进去。 - de_classified
1个回答

6
我建议使用https://pypi.org/project/pip-tools/中的pip-compile。这个工具让你定义一个“in”文件requirements.in,其中只列出了你的顶级依赖,例如:

requirements.in:

flask

然后你使用pip-compile生成requirements.txt
$ pip-compile --output-file=requirements.txt requirements.in
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --output-file=requirements.txt requirements.in
#
click==7.1.2              # via flask
flask==1.1.2              # via -r requirements.in
itsdangerous==1.1.0       # via flask
jinja2==2.11.2            # via flask
markupsafe==1.1.1         # via jinja2
werkzeug==1.0.1           # via flask

然后您可以为不同的环境(如test.in/test.txt)拥有单独的.in/.txt文件。

最后,您可以递归地包含多个要求文件,例如:

dev-requirements.txt:

-r requirements.txt
-r test.txt
-r lint.txt

1
请参阅此文档以获取分层要求的工作流程。 - Albert Tugushev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接