【问题标题】:Separating development and production dependencies with virtualenv使用 virtualenv 分离开发​​和生产依赖项
【发布时间】:2018-04-28 22:33:48
【问题描述】:

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

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

【问题讨论】:

  • 使用 2 个不同的 requirements.txt 文件?
  • 您可以为每个环境创建不同的文件。检查this answer

标签: python virtualenv


【解决方案1】:

对于不同的环境,您可以拥有多个 requirements.txt 文件。例如。 requirements_dev.txt, requirements_prod.txt...

这些文件会有不同的固定(也有版本)包。它们可以通过手动 pip 安装包然后将pip freeze 的输出通过管道传输到文件来生成。

【讨论】:

  • 如果这样做,我如何在本地机器上使用不同的环境?我可以根据不同的 requirements.txt 文件切换环境吗?我将安装我的任何 require.txt 文件中的每个包,例如,只有在服务器上运行测试时,我才知道我的测试环境是否缺少包。
  • @handris 一般来说,requirements-*.txt 文件只会包含您在其他地方不想要的额外包。例如 requirements-dev.txt 将有调试器等,而 requirements_test.txt 也将包含测试库。因此,如果您全部安装它们应该不是问题(因此您将始终安装基本/主文件,但其他文件取决于 test/dev/prod 环境)。否则你也可以在不同的virtualenv中安装不同的需求文件,使用pip install -r requirement_file.txt
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2019-04-16
    • 2014-10-26
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    相关资源
    最近更新 更多