【发布时间】:2013-12-24 09:12:19
【问题描述】:
我正在研究如何将 vagrant 添加到我的开发环境中。我的大部分网络开发都是在 python 中完成的,我对 python 相关的细节很感兴趣,但是这个问题更笼统。
我喜欢将所有与开发相关的东西都隔离在虚拟机中的想法,但我还没有找到一种有效的方法来使用它。基本上,我看到了 3 种设置方法:
让所有服务(如数据库服务器、MQ 等)以及正在开发的应用程序在 VM 中运行。开发人员可以通过 ssh 连接到 VM 并在那里编辑源代码、运行应用程序、测试等,所有这些都在 ssh 终端中完成。
与 1) 相同,但使用普通 GUI 编辑器在映射目录中编辑主机上的源。通过 ssh 在 vagrant 上运行应用程序和测试。这似乎是最流行的使用 vagrant 的方式。
仅在 VM 中托管外部服务。将应用程序依赖项安装到主机上的 virtualenv 并从那里运行应用程序和测试。
所有这些方法都有自己的缺陷:
在文本控制台中开发实在是太不方便了,这对我来说是个阻碍。虽然我是一位经验丰富的 ViM 用户并且可以接受它,但我不能向曾经在任何图形 IDE 中工作的任何人推荐这种方法。
您可以使用熟悉的工具进行开发,但不能使用自动补全,因为所有 python 库都安装在 VM 中。您的回溯将指向非本地文件。您将无法在编辑器中打开库源,ctags 将不起作用。
失去大部分“隔离”功能:您必须自己安装所有编译器、*-dev 库才能安装 python 依赖项并运行应用程序。在 linux 上这很容易,但在 OSX 上设置它们可能要困难得多,在 Windows 上我猜这几乎是不可能的。
那么,问题是:对于第 2 和第 3 方法的问题是否有任何补救措施?更具体地说,如何创建一个隔离且易于复制的环境,同时享受在主机上开发的所有舒适性?
【问题讨论】:
-
我也有类似的想法。你找到好的解决方案了吗?最近我一直在想 Docker(或者更普遍的 Linux 容器)可能会提供更好的系统,但我还没有测试过。
-
就个人而言,我使用的是上面的第三个选项。我所有的开发人员都使用 Ubuntu,因此我们可以拥有非常相似的主机配置。所以我们只需要安装一堆 ubuntu 包就可以了。我得出的结论是,您必须以开发环境独立的名义做出这些牺牲。 And it only makes sense to switch to option 1 or 2 when ongoing price of option 3 becomes too high (i.e. you have to support too many dev environment variants).但我仍然关注它。如果 Docker 至少解决了其中一些问题,请告诉我!
-
我对#3 的问题是,如果不同的项目有相互冲突的依赖关系该怎么办。现在我意识到 PyCharm 通过允许远程 Python 解释器与 Vagrant 一起工作。当然,它是特定于 Python 的,可能会将您绑定到 IDE(我不知道其他人是否支持这一点)。使用 Docker,我希望您可以为每个项目提供一个开发环境,并配有 GUI 编辑器。当然,您已经可以使用其他虚拟化方法做到这一点,但性能成本更高。
标签: python development-environment vagrant