pip-tools 是正确的工具。我遇到了同样的问题,所以我用这种简单的方法解决了。
来自site:
如果您有不同的环境需要安装不同但兼容的软件包,那么您可以创建分层需求文件并使用一层来约束另一层。
例如,如果您有一个 Django 项目,您希望在生产中使用最新的 2.1 版本,并且在开发时您想使用 Django 调试工具栏,那么您可以创建两个 *.in 文件,每个层一个:
# requirements.in
django<2.2
在开发需求 dev-requirements.in 的顶部,您使用 -c requirements.txt 将开发需求限制为已经在 requirements.txt 中选择用于生产的包。
# dev-requirements.in
-c requirements.txt
django-debug-toolbar
首先,像往常一样编译 requirements.txt:
$ pip-compile
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile
#
django==2.1.15
# via -r requirements.in
pytz==2019.3
# via django
现在编译开发需求,并使用 requirements.txt 文件作为约束:
$ pip-compile dev-requirements.in
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile dev-requirements.in
#
django-debug-toolbar==2.2
# via -r dev-requirements.in
django==2.1.15
# via
# -c requirements.txt
# django-debug-toolbar
pytz==2019.3
# via
# -c requirements.txt
# django
sqlparse==0.3.0
# via django-debug-toolbar
正如您在上面看到的,即使 2.2 版本的 Django 可用,但开发要求仅包括 2.1 版本的 Django,因为它们受到限制。现在两个编译好的需求文件都可以安全地安装在开发环境中了。
在生产阶段使用安装需求:
$ pip-sync
您可以通过以下方式在开发阶段安装需求:
$ pip-sync requirements.txt dev-requirements.txt