从运行其他python版本的系统激活virtualenv

时间:2019-05-14 06:42:17

标签: python virtualenv

我有两台计算机(运行Ubuntu)可以访问一台服务器。两台计算机的共享主目录位于服务器上。

在计算机(A)上安装了python 3.5,在计算机(B)上安装了python 3.7。我从计算机(B)在共享主目录上创建了virtualenv(使用python 3.7)。

现在,尽管可以从计算机(A)激活该virtualenv,但它不使用“ virtualenv-python 3.7”,而是使用系统的python 3.5。因此,从技术上讲,virtualenv已激活,但实际上并未激活。

请注意,VIRTUAL_ENV路径设置正确。

我认为virtualenv-folder是一个完全封闭的环境,甚至不需要在系统上安装任何python。那么为什么它不起作用?

2 个答案:

答案 0 :(得分:1)

简短的答案是因为在计算机A和B上,python的路径都可能只是别名。您可以通过遵循计算机B上的路径并使用OS的GUI进行验证,可以看到它是到计算机上其他位置(可能是usr/bin/)上的实际python安装的符号链接。例如,在一台发现多个Python安装的机器上,我看到我的虚拟环境(.virtualenvs/revconnecion/include/python3.6)是原始/anaconda3/include/python3.6的别名。

enter image description here

解决方案:

您可以在创建环境时通过指定python版本本身来创建虚拟环境:

python3.7 -m venv sharedvenv

或:

virtualenv -p python3.7

您也可以手动更改符号链接/别名,但是上述方法效果更好。使用特定版本的Python本身创建虚拟环境不会产生歧义,显式比隐式更好。

在计算机A和B上同时运行which python,以验证它是否指向正确的Python版本。

答案 1 :(得分:1)

virtualenv没有完整的Python安装。相反,它链接到系统(该链接位于<env>/lib/orig-prefix.txt中的FYI)上的安装。 env的目录树具有一些存根和特殊的逻辑,但它使用该安装中的大部分内容。

因此,如果您在没有与创建虚拟环境的路径相同的Python的系统上运行activate,该脚本将无法正常工作。可能会碰巧出现在同一路径上的其他事物上,但这不是受支持的情况,因此所有赌注都没有了。


如果您需要“完全封闭的环境”,则可能需要看看pyenv 确实做到这一点-在您的主目录下安装完整的Python。 (或者,您也可以仅将Python从源代码安装到主目录下的某个位置,但是pyenv可以轻松地切换到该安装,然后再返回。)