我使用 VirtualBox 手动设置和其中的 virtualenvs 在我的本地机器上运行 Django 项目。最近我发现了 Vagrant 并决定改用它,因为它看起来非常简单和有用。
但我不知道 - 我还需要使用 virtualenv Vagrant VM,是鼓励实践还是禁止?
3 回答
正如Devin 所说virtualenv
,只要您是机器的唯一用户,就不必在部署到 vagrant 机器时使用。但是,即使您不将其用于开发或部署,我仍然会启用 a virtualenv
、setup.py等。
在我(不是这样)的拙见中,任何 Python 项目都应该:
- 包含一个.cvsignore、.gitignore、.hgignore、 ... 文件,它会忽略常见的 Python 中间文件和
virtualenv
目录。 - 以pip兼容格式列出所需包的requirements.txt文件
包含具有以下目标的Makefile :
- environment
virtualenv
: 使用or创建虚拟环境pyvenv
- 要求
pip
:使用和requirements.txt文件安装所需的包 - 开发:
setup.py develop
使用虚拟环境运行 - 测试:运行
setup.py test
- clean:删除中间文件、覆盖报告等。
- 维护者清洁:删除虚拟环境
这个想法是使Makefile尽可能简单。应该设置依赖项,以便您可以克隆存储库(或提取源 tarball)并运行
make test
. 它应该创建一个虚拟环境、安装需求并运行单元测试。- environment
您还可以在运行vagrant up的 Makefile 中包含一个Vagrantfile和一个vagrant目标。在维护者清洁目标中添加一个。vagrant destroy
这使得任何使用 vagrant 或不使用它进行开发的人都可以使用您的项目。如果(何时)您需要在 vagrant 或物理环境中与另一个项目一起使用 deploy ,包括一个干净的setup.py和一个描述您的最小环境的Vagrantfile,可以轻松安装到虚拟环境或共享 vagrant 机器中。
如果每个项目运行一个 vagrant VM,则没有直接理由使用 virtualenv。
如果其他贡献者不使用 vagrant,但使用 virtualenv,那么您可能希望使用它并支持它,以使他们的生活更轻松。
Virtualenv 和其他形式的隔离(Docker、专用 VM 等)不一定是相互排斥的。即使在隔离的环境中,使用 virtualenv 仍然是一个好主意,可以将虚拟系统 Python 与您的项目包隔离开来。*nix 系统使用大量基于 Python 的实用程序,这些实用程序依赖于系统 Python 中可用的特定版本的包,您不想弄乱这些。
请注意,virtualenv 仍然只能使用纯 Python 包,并且无法解决仍会与系统混合的本机扩展的情况。