使用virtualenv分离开发和生产依赖性

时间:2017-11-15 15:54:41

标签: python virtualenv

我有一个简单的烧瓶应用程序,我使用virtualenv来管理我的依赖项。但是,我想分离我的依赖项。对于测试,我使用Flask-Testing,但这是我不希望包含在我的生产环境中的依赖。

如何分离我的依赖项,以便我对开发和生产有独立的依赖关系?

2 个答案:

答案 0 :(得分:2)

您可以为不同的环境提供多个DistinctBy个文件。例如。 requirements.txtrequirements_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