【问题标题】:Do I need to use virtualenv with Vagrant?我需要将 virtualenv 与 Vagrant 一起使用吗?
【发布时间】:2013-08-16 10:09:32
【问题描述】:

我曾使用 VirtualBox 手动设置和其中的 virtualenvs 在我的本地机器上运行 Django 项目。最近我发现了 Vagrant 并决定改用它,因为它看起来非常简单和有用。
但我不知道 - 我是否还需要使用 virtualenv Vagrant VM,是鼓励实践还是禁止?

【问题讨论】:

  • 如果你确实在 vagrant 上使用 virtualenv,当 virtualenv 位于 vagrant 共享目录中时,请注意速度慢。更多:stackoverflow.com/questions/18972471/…
  • 我不知道为什么这么多人回答这个问题“不要使用virtualenv而是创建virtualenv-usable包”,创建一个python包是一个独立的过程,你仍然可以pip install即使您不在 virtualenv 中,也可以打包。所以当然每个 python 软件都应该支持 setuptools。

标签: python django virtual-machine virtualenv vagrant


【解决方案1】:

作为Devin stated,当你部署到一个vagrant机器时,没有必要使用virtualenv,只要你是机器的唯一用户。但是,即使您不将其用于开发或部署,我仍然会启用 virtualenvsetup.py 等。

以我(不是这样)的拙见,任何 Python 项目都应该:

  1. 包含一个.cvsignore.gitignore.hgignore、...文件,忽略常见的Python中间文件以及@ 987654325@ 目录。
  2. requirements.txt 文件,以pip-compliant 格式列出所需的包
  3. 包含一个具有以下目标的 Makefile

    • 环境:使用virtualenvpyvenv 创建虚拟环境
    • requirements:使用 piprequirements.txt 文件安装所需的软件包
    • 开发:使用虚拟环境运行setup.py develop
    • 测试:运行setup.py test
    • clean:删除中间文件、覆盖率报告等。
    • ma​​intainer-clean:移除虚拟环境

    我们的想法是使 Makefile 尽可能简单。应设置依赖项,以便您可以克隆存储库(或提取源 tarball)并运行make test。它应该创建一个虚拟环境、安装需求并运行单元测试。

您还可以在运行 vagrant up 的 Makefile 中包含一个 Vagrantfile 和一个 vagrant 目标。将vagrant destroy 添加到 ma​​intainer-clean 目标中。

这使得任何使用 vagrant 或不使用它进行开发的人都可以使用您的项目。如果(何时)您需要在 vagrant 或物理环境中与另一个项目一起使用 deploy,包括一个干净的 setup.py 和一个描述您的最小环境的 Vagrantfile ,这会很简单安装到虚拟环境或共享 vagrant 机器中。

【讨论】:

  • 你能举一些这样的项目的例子吗?
【解决方案2】:

如果每个项目运行一个 vagrant VM,则没有直接理由使用 virtualenv。

如果其他贡献者不使用 vagrant,但使用 virtualenv,那么您可能希望使用它并支持它以使他们的生活更轻松。

【讨论】:

  • '每个项目一个 vagrant VM' - 你的意思是 Vagrants 的工作方式是,如果我添加一个盒子,并在许多项目中使用它 - 他们不会使用单独的 vdi 文件,他们会共享相同的操作系统及其设置?
  • 不,你可以使用一个盒子——一个盒子只是一个虚拟机的模板。我的意思是,如果多个项目使用同一个目录并且该目录是一个 vagrant 环境,那么这些项目就不会相互隔离。
【解决方案3】:

Virtualenv 和其他形式的隔离(Docker、专用 VM 等)不一定是相互排斥的。即使在孤立的环境中,使用 virtualenv 仍然是一个好主意,可以将虚拟系统 Python 与您的项目包隔离开来。 *nix 系统使用大量基于 Python 的实用程序,这些实用程序依赖于系统 Python 中可用的特定版本的包,您不想弄乱这些。

请注意,virtualenv 仍然只能使用纯 Python 包,并且无法解决仍会与系统混合的原生扩展的情况。

【讨论】:

  • 在走完所选答案的路线并处理了奇怪的包导入问题后,我更加欣赏这个答案。浪费了几个小时,我回来使用虚拟环境;所以我强烈推荐它。它可以为您节省一些时间(除非您是 python/linux 专业人士并且想要处理它)。
猜你喜欢
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 2015-01-20
  • 2017-02-21
相关资源
最近更新 更多