Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从运行不同python版本的系统激活virtualenv_Python_Virtualenv - Fatal编程技术网

从运行不同python版本的系统激活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是激活的,但实际上不是 请注意,虚拟环境路径设

我有两台计算机(运行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是不可移植的。您必须在第二台主机上重新创建它。