使用Django进行Web开发的虚拟环境的最佳实践?

时间:2013-03-08 02:42:39

标签: django web-applications virtualenv vagrant

这是一个Django和Python,可能只是一个普通的Web开发问题。

使用virtualenv与vagrant vs virtual box等之间的区别是什么?

我对何时使用哪一个感到困惑:/我一直在使用虚拟环境并为不同的项目创建新的虚拟环境.... 这是正确的方法吗? 每个项目一个virtualenv?

我不确定流浪汉何时何地发挥作用......我应该设置流浪汉,然后使用virtualenv?

这可能是一个愚蠢的问题但是......如果我和其他人一起做这个项目的话。他们是否也必须建立虚拟环境?只是为了合作?

我们在本地机器上工作然后将其推入主分支更有意义吗?我有点困惑......我觉得我做错了......

感谢所有人的回复!

4 个答案:

答案 0 :(得分:8)

Virtualenv为您安装了一个本地沙箱,用于安装Python模块。

Vagrant是一款用于创建虚拟机的自动化工具。

VirtualBox是一个免费的开源环境,用于运行虚拟机,例如Vagrant创建的虚拟机。

Virtualenv真的是你需要在本地机器上进行沙盒开发。我们在工作中使用Vagrant来自动创建VM。这样,进入项目的新开发人员基本上没有任何配置可以开始工作。

如果您正在与其他开发人员合作,他们需要来执行上述任何操作来处理您的Django项目,但是如果涉及到很多配置,则不能用pip和requirements.txt完成,然后你可以看看Vagrant来简化一些自动化。

但是你的假设是正确的,你可以在本地分支上工作并推回回购。其他一切都只是结冰。

答案 1 :(得分:5)

Virtualenv是一个python构造,它包含一组特定的包,与您的系统包分开。您的操作系统附带的Python及其软件包的版本或单独安装的软件包是“系统软件包”。

Virtualbox完全不同 - 它是一个虚拟机,一个整箱操作系统。

我不熟悉Vagrant。

你需要的只是virtualenv。为每个项目创建一个新的virtualenv(它们非常轻量级!)您需要这样做,因为virtualenv的重点是隔离项目所需的那些软件包的确切包和版本。然后激活virtualenv并使用pip install来安装所需的软件包,大概从Django本身开始。

获得所需的所有软件包后,使用pip freeze > requirements.txt创建一个名为requirements.txt的文件,该文件记录您决定使用的所有软件包。

当其他人在您的项目上进行协作时,他们可以启动virtualenv,将代码拉入其中,然后运行pip install -r requirements.txt来复制您的环境。他们甚至可以修改requirements.txt,通过版本控制系统将其推送给您,您可以自己运行pip install -r requirements.txt来修改您的环境以匹配他们的更改。

这一切都是必不可少的,因为如果没有virtualenv,例如,在您的计算机上有一个需要Django 1.4的项目和一个需要Django 1.5的项目的问题变得非常复杂。

Virtualenv不是一个完整的操作系统,只是一个python环境,所以即使你使用它,你仍然在使用你的本地机器。

答案 2 :(得分:1)

我们使用virtualenv 一个Ubuntu虚拟机。原因如下:

  • virtualenv允许我们在给定的操作系统实例上拥有孤立的Python环境
  • 在虚拟机中使用Ubuntu dekstop进行Python开发,模仿在服务器(也是Ubuntu)上部署时的样子。这意味着我们可以准确理解外部OS包依赖关系和配置。当您使用OSX或Windows进行开发并使用Linux进行部署时,您不会轻易获得此信息。

答案 3 :(得分:0)

重要的一点是虚拟机是可移植的。您可以拍摄快照并将其轻松部署到其他位置。通过Vagrant和Ansible的组合,您可以自动化远程部署。