我有一个简单的烧瓶应用程序,我使用virtualenv来管理我的依赖项。但是,我想分离我的依赖项。对于测试,我使用Flask-Testing,但这是我不希望包含在我的生产环境中的依赖。
如何分离我的依赖项,以便我对开发和生产有独立的依赖关系?
答案 0 :(得分:2)
您可以为不同的环境提供多个DistinctBy
个文件。例如。 requirements.txt
,requirements_dev.txt
...
这些文件具有不同的固定(包含版本)包。可以通过手动pip安装包然后将requirements_prod.txt
的输出传递给文件来生成它们。
答案 1 :(得分:0)
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
正如您在上面看到的,即使 Django 2.2 版本可用,但开发要求仅包括 Django 的 2.1 版本,因为它们受到限制。现在两个编译的需求文件都可以安全地安装在开发环境中了。
在生产阶段安装需求使用:
$ pip-sync
您可以通过以下方式在开发阶段安装需求:
$ pip-sync requirements.txt dev-requirements.txt