Virtualenv 为不同的 os 提供不同的版本

Virtualenv gives different versions for different os

我正在两个独立的系统 Debian Jessie 和 Mac El Capitan 上开发一个 django 项目。该项目托管在 github 上,两个系统都将从那里提取或推送到。

但是,我注意到在我的 Debian 上,当我 运行 python --version 时,它给了我 Python 3.4.2 但在我的 Mac 上,它给了我 Python 2.7.10 尽管处于同一个虚拟环境中。此外,当我在我的 Debian 上 运行 django-admin --version 时,它在我的 Mac、1.8.3.

上给了我 1.10

即使我刚从 github 和 运行 命令克隆项目时也会发生这种情况。

为什么虚拟环境不保持python和django版本相同?

感谢@Oliver 和@Daniel 的评论让我找到了为什么它不起作用的答案。

我用 python 3 在我的 Debian 上启动了虚拟环境。virtualenv 创建了虚拟环境,但它是专门为 Debian 设计的。

当我将它用于 mac 时,由于它不能 运行 虚拟环境中的 python 可执行文件(因为它仅与 Debian 兼容),因此,它使用我的 Mac 的系统 python,即 Python 2.7.10.

综上所述,由于virtualenv在系统上使用python可执行文件,当python可执行文件在另一个系统上运行时,它将无法运行。

现在您明白虚拟环境不能轻易地从一台机器转移到另一台机器。通常使用

pip freeze

命令并将其输出存储在名为 requirements.txt 的文件中。然后其他任何人都可以通过 运行

在他们的机器上重建您的环境
pip install -r requirements.txt

当你创建一个新的虚拟环境时,你可以通过 -p--python 开关说出你想使用哪个 Python 解释器,后面应该是指向正确的可执行文件。

我个人建议不要以任何方式修改系统 Python,因为系统维护例程通常依赖于它的完整性。在像 /usr/local/bin 的地方安装 Python 2 和 3 的新副本相对简单(Mac 用户经常为此使用 brew)并且虚拟环境依赖于不同的 Python 口译员。