跨平台虚拟环境界面设计

19

我已经在Windows上开发了整个项目(Django,Python),而所有的PaaS都使用Linux。

VirtualEnv on Linux:

VirtualEnv_dir /
                 bin/ activate, activate_this.py
                 include /
                 lib /
                 local /

VirtualEnv of Windows:

VitualEnv_dir /
                Include/
                Lib /
                Scripts/ activate.bat, activate_this.py

由于virtualenv在Windows和Linux上有很大的不同。 我该如何在PaaS上使用我的Windows virtualenv?

编辑:

如果我在Windows上,我需要运行call virtualenv_dir/scripts/activate.bat来进入虚拟环境。 而在Linux上,则是source virtualenv_dir/bin/activate

现在,我的存储库持有使用Windows(使用.bat)生成的virtualenv。 当我将存储库推送到Linux系统时,我应该如何运行它? (bat文件将无法工作!)

我正在使用OpenShift PaaS,在其中我想将一个virtualenv放在Git存储库中。 如何激活它?

最佳解决方案是什么?


2
这个问题有点笼统。首先,我不同意它有很大的区别,但在特定的设置和环境中可能会出现一些小差异,这些差异可能会变成重大问题。因此,请提供更多关于您使用情况下所遇到或预见到的问题的细节。 - schacki
@JosefAssad,希望您现在觉得问题更加具体了!! - Surya
1个回答

33

除非使用了一些特定于Windows的库,或者使用了替代的Python实现(例如IronPython),否则无需担心。

许多人(包括我自己)在Windows上进行开发,并在Linux上进行生产部署并使用virtualenv来实现此目的。它旨在使您的环境可移植。

您不需要将整个virtualenv推送到Linux。

一旦您准备好你的虚拟环境并且您的代码可以工作,您应该冻结您的应用程序的要求:

pip freeze > requirements.txt

在您的目标操作系统中,创建一个 虚拟环境:

virtualenv --no-site-packages prod_env

在最近版本的 virtualenv 中,默认情况下使用 --no-site-packages 参数。

接下来,将开发所需的依赖项文件添加到虚拟环境中:

source prod_env/bin/activate
pip install -r requirements.txt

当您需要更改需求时,只需重新生成requirements.txt文件并在生产中运行pip install -r requirements.txt

在某些情况下,您的生产系统无法访问互联网以下载软件包,因此pip install就不起作用了。对于这些情况,您可以创建自己的私有pypi服务器并将软件包推送到那里。通过这种方式,您还可以创建和推送私有软件包,并使用正常的setuptools实用程序进行安装。

一旦您决定哪个流程适合您,就可以在部署脚本中自动化它;通常是在源代码管理系统中添加钩子。有些人更喜欢独立的发布工程流程(有发布经理-一个人而不是一个程序)。


那么,在Linux上如何使用在Windows上生成的virtualenv目录?你能分享一下你的方法吗? - Surya
1
我认为Burhan所说的是,在Linux系统上创建一个虚拟环境,将你的源代码移动过去(是你的源代码,而不是虚拟环境工件),并确保使用pip安装所有要求的模块(http://blog.ianbicking.org/2008/12/16/using-pip-requirements/)。除非你使用了Windows特定的库,否则这就是你需要做的全部。 - JosefAssad
1
正如 @JosefAssad 所说,您的存储库不应包含 virtualenv。它应该包括一个“requirements.txt”文件,列出需要安装到 virtualenv 中的所有软件包。 - codeape
我也在寻找这个问题的答案。如果您能将Linux和Windows目录并排放置,那就太好了。 - NotAnAmbiTurner
正如已经提到的,您不需要为Windows和Linux拥有单一环境,因为环境应该是可复制的,只需创建一个新环境并在其中安装所需的软件包即可创建特定于操作系统的环境。此外,某些库可能需要编译,因此这些库不能轻易地从一个系统移动到另一个系统,但可以在所需的系统上安装(并作为安装步骤的一部分进行编译)。 - Nikita
“--no-site-packages”选项已不再可用,并默认激活。因此,您只需要执行“virtualenv prod_env”。 - hobs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接