从运行不同python版本的系统激活virtualenv
我有两台计算机(运行Ubuntu)可以访问一台服务器。两台计算机的共享主目录位于服务器上 在计算机(A)上安装了python 3.5,在计算机(B)上安装了python 3.7。我在共享主目录(使用Python3.7)上从计算机(B)创建了一个virtualenv 现在,虽然可以从计算机(A)激活该virtualenv,但它不使用“virtualenv python 3.7”,而是使用系统的python 3.5。因此,从技术上讲,virtualenv是激活的,但实际上不是 请注意,虚拟环境路径设置正确从运行不同python版本的系统激活virtualenv,python,virtualenv,Python,Virtualenv,我有两台计算机(运行Ubuntu)可以访问一台服务器。两台计算机的共享主目录位于服务器上 在计算机(A)上安装了python 3.5,在计算机(B)上安装了python 3.7。我在共享主目录(使用Python3.7)上从计算机(B)创建了一个virtualenv 现在,虽然可以从计算机(A)激活该virtualenv,但它不使用“virtualenv python 3.7”,而是使用系统的python 3.5。因此,从技术上讲,virtualenv是激活的,但实际上不是 请注意,虚拟环境路径设
我认为virtualenv文件夹是一个完全封闭的环境,甚至不需要在系统上安装任何python。那么为什么它不工作呢?简单的回答是,在A和B两台计算机上,python的路径很可能只是一个别名。您可以按照计算机B上的路径进行验证,并使用操作系统的GUI可以看到它是一个符号链接,指向您机器上其他地方的实际python安装(可能是
usr/bin/
)。例如,在一台发现了多个Python安装的机器上,我看到我的虚拟环境(.virtualenvs/revconnecion/include/python3.6
)是原始/anaconda3/include/python3.6
的别名
解决方案:
通过在创建环境时指定python版本本身,可以创建虚拟环境:
python3.7 -m venv sharedvenv
或:
您也可以手动更改符号链接/别名,但上述方法效果更好。使用Python本身的特定版本来创建虚拟环境不会留下任何歧义,显式优于隐式
在计算机A和B上运行
哪个python
,以验证它是否指向正确版本的python。简短的回答是,在计算机A和B上,python的路径可能只是一个别名。您可以按照计算机B上的路径进行验证,并使用操作系统的GUI可以看到它是一个符号链接,指向您机器上其他地方的实际python安装(可能是usr/bin/
)。例如,在一台发现了多个Python安装的机器上,我看到我的虚拟环境(.virtualenvs/revconnecion/include/python3.6
)是原始/anaconda3/include/python3.6
的别名
解决方案:
通过在创建环境时指定python版本本身,可以创建虚拟环境:
python3.7 -m venv sharedvenv
或:
您也可以手动更改符号链接/别名,但上述方法效果更好。使用Python本身的特定版本来创建虚拟环境不会留下任何歧义,显式优于隐式
在计算机A和B上运行
哪个python
,以验证它指向的是正确版本的python。virtualenv没有完整的python安装。相反,它链接到系统上的安装(仅供参考,该链接位于/lib/orig prefix.txt
)。env的目录树有一些存根和特殊逻辑,但它使用了该安装中的大容量
因此,如果您在一个系统上运行activate
,而该系统的Python路径与创建virtualenv的路径不同,那么该脚本将无法正常工作。它可能碰巧与同一路径上存在的其他内容挂钩,但这不是一个受支持的场景,因此所有赌注都没有了
如果您需要一个“完全封闭的环境”,您可能想看看
pyenv
,它正是这样做的——在home目录下安装一个完整的Python。(或者,您可以将Python从源代码安装到home目录下的某个地方——但是pyenv
可以轻松地切换到该安装并返回。)virtualenv没有完整的Python安装。相反,它链接到系统上的安装(仅供参考,该链接位于/lib/orig prefix.txt
)。env的目录树有一些存根和特殊逻辑,但它使用了该安装中的大容量
因此,如果您在一个系统上运行activate
,而该系统的Python路径与创建virtualenv的路径不同,那么该脚本将无法正常工作。它可能碰巧与同一路径上存在的其他内容挂钩,但这不是一个受支持的场景,因此所有赌注都没有了
如果您需要一个“完全封闭的环境”,您可能想看看
pyenv
,它正是这样做的——在home目录下安装一个完整的Python。(或者您可以将Python从源代码安装到home目录下的某个地方——但是pyenv
可以很容易地切换到该安装并返回。)改用pipenv
:Python VirtualEnv是不可移植的。您必须在第二台主机上重新创建它。请改用pipenv
:Python VirtualEnv是不可移植的。您必须在第二台主机上重新创建它。