22

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

4

3 回答 3

31

正如Devin 所说virtualenv,只要您是机器的唯一用户,就不必在部署到 vagrant 机器时使用。但是,即使您不将其用于开发或部署,我仍然会启用 a virtualenvsetup.py等。

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

  1. 包含一个.cvsignore.gitignore.hgignore、 ... 文件,它会忽略常见的 Python 中间文件和virtualenv目录。
  2. 以pip兼容格式列出所需包的requirements.txt文件
  3. 包含具有以下目标的Makefile :

    • environmentvirtualenv : 使用or创建虚拟环境pyvenv
    • 要求pip:使用和requirements.txt文件安装所需的包
    • 开发setup.py develop使用虚拟环境运行
    • 测试:运行setup.py test
    • clean:删除中间文件、覆盖报告等。
    • 维护者清洁:删除虚拟环境

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

您还可以在运行vagrant up的 Makefile 中包含一个Vagrantfile和一个vagrant目标。在维护者清洁目标中添加一个。vagrant destroy

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

于 2013-08-16T12:36:21.947 回答
12

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

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

于 2013-08-16T10:53:51.437 回答
9

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

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

于 2015-02-19T08:41:24.577 回答