5

这是一个 Django 和 Python,也许只是一个一般的 Web 开发问题。

使用 virtualenv vs vagrant vs virtual box 等有什么区别...?

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

我不确定 vagrant 何时何地发挥作用......我应该设置 vagrant 然后使用 virtualenv 吗?

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

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

谢谢大家的回复!

4

4 回答 4

8

Virtualenv 设置了一个本地沙箱供您安装 Python 模块。

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

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

Virtualenv 实际上是您在本地机器上进行沙盒开发所需的一切。我们在工作中使用 Vagrant 来自动创建虚拟机。通过这种方式,进入项目的新开发人员基本上只需零配置即可开始工作。

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

但是你的假设是正确的,你们都可以在本地分支上工作并推回 repo。其他一切都只是锦上添花。

于 2013-03-08T02:52:49.440 回答
5

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

Virtualbox 完全不同——它是一个虚拟机,一个盒子里的整个操作系统。

我对流浪者不熟悉。

你所需要的只是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 环境,所以即使你在使用它,你仍然在本地机器上工作。

于 2013-03-08T02:53:26.567 回答
1

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

  • virtualenv 允许我们在给定的操作系统实例上拥有隔离的 Python 环境
  • 在虚拟机中使用 Ubuntu dekstop 进行 Python 开发模拟了它部署在同样是 Ubuntu 的服务器上时的样子。这意味着我们准确地了解了外部 OS 包的依赖关系和配置。当您使用 OSX 或 Windows 进行开发并使用 Linux 进行部署时,您不会轻易做到这一点。
于 2013-03-08T02:58:49.863 回答
0

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

于 2018-07-17T12:46:15.943 回答