【问题标题】:Cross platform interface for virtualenvvirtualenv 的跨平台接口
【发布时间】:2012-08-15 13:24:59
【问题描述】:

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

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

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

什么是最好的解决方案

【问题讨论】:

  • 这个问题有点笼统。首先,我不同意它有很大的不同,但是有一些细微的差异可能会变成特定设置和环境的主要问题。因此,请提供更多详细信息,说明您在使用案例中遇到或预见到的问题。
  • @JosefAssad 我希望你现在能找到具体的问题!!

标签: python django virtualenv cloud-hosting paas


【解决方案1】:

除非您使用某些 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 技巧不起作用。对于这些场景,您可以创建自己的 private pypi server 并将您的包推送到那里。通过这条路线的额外好处是您可以创建和推送私有包并使用普通的 setuptools 实用程序安装它们。

一旦您确定了适合您的流程,您就可以在部署脚本中将其自动化;通常与您的源代码管理系统挂钩。有些人更喜欢单独的发布工程流程(有发布经理 - 那是一个人,而不是一个程序)。

【讨论】:

  • 那么,如何在 Linux 上仍然使用在 Windows 上生成的 virtualenv 目录?你能分享你的方法吗?
  • 我认为 Burhan 的意思是,只需在 Linux 系统上创建一个 vrtualenv,将源代码移过来(您的源代码,而不是 virtualenv 人工制品)并确保 pip 存在所有要求( blog.ianbicking.org/2008/12/16/using-pip-requirements)。除非您使用过特定于 Windows 的库,否则您只需要这样做。
  • 正如@JosefAssad 所说:您的回购不应包含 virtualenv。它应该包含一个requirements.txt 文件,其中列出了需要安装到 virtualenv 中的所有包。
  • 我也在寻找这个问题的答案。如果你能并排放置 linux 和 windows 目录,那就太好了
  • 如前所述,您不需要为 Windows 和 Linux 提供单一环境,因为环境应该是可复制的,因此必须可以通过创建新的操作系统来创建特定的操作系统环境并在那里安装所需的软件包。此外,某些库可能需要编译,因此不能轻易地将它们从一个系统移动到另一个系统,而是可以在所需系统上安装(并作为安装步骤的一部分进行编译)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多