17

我在 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?

编辑:

如果我在窗户上,我需要跑call virtualenv_dir/scripts/activate.bat进去。在 Linux 中,它的东西source virtualenv_dir/bin/activate

现在,我的 repo 包含一个使用 Windows(使用 .bat)生成的 virtualenv。当我将 repo 推送到 Linux 系统时,我应该如何运行它?(bat 文件不起作用!)

我正在使用 OpenShift PaaS,我想在 Git repo 上放置一个 virtualenv。我怎样才能激活它?

什么是最好的解决方案

4

1 回答 1

29

除非您使用某些 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在生产中运行。

在某些情况下,您的生产系统无法访问 Internet 来下载软件包,因此该pip install技巧不起作用。对于这些场景,您可以创建自己的私有 pypi 服务器并将您的包推送到那里。通过这条路线的额外好处是,您可以创建和推送私有包并使用普通的 setuptools 实用程序安装它们。

一旦你决定了哪个过程适合你——然后你在你的部署脚本中自动化它;通常与您的源代码管理系统挂钩。有些人更喜欢一个单独的发布工程过程(有一个发布经理——那是一个人,而不是一个程序)。

于 2012-08-20T08:27:40.053 回答