我有两台计算机(运行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。那么为什么它不起作用?
答案 0 :(得分:1)
简短的答案是因为在计算机A和B上,python的路径都可能只是别名。您可以通过遵循计算机B上的路径并使用OS的GUI进行验证,可以看到它是到计算机上其他位置(可能是usr/bin/
)上的实际python安装的符号链接。例如,在一台发现多个Python安装的机器上,我看到我的虚拟环境(.virtualenvs/revconnecion/include/python3.6
)是原始/anaconda3/include/python3.6
的别名。
您可以在创建环境时通过指定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
可以轻松地切换到该安装,然后再返回。)