从系统 运行 不同的 python 版本激活 virtualenv
Activate virtualenv from a system running a different python version
我有两台计算机(运行 Ubuntu)可以访问一台服务器。两台电脑的共享主目录在服务器上
在计算机 (A) 上安装了 python 3.5,在计算机 (B) 上安装了 python 3.7。我在共享主目录(使用 python 3.7)上从计算机 (B) 创建了一个 virtualenv。
现在虽然可以从计算机 (A) 激活该 virtualenv,但它不使用 "virtualenv-python 3.7",而是系统的 python 3.5。所以从技术上讲,virtualenv 已激活,但实际上并未激活。
请注意 VIRTUAL_ENV 路径设置正确。
我以为 virtualenv-folder 是一个完全封闭的环境,甚至不需要在系统上安装任何 python。那么为什么它不起作用?
简短的回答是因为在计算机 A 和 B 上,您的 python 的路径可能只是一个别名。您可以通过遵循计算机 B 上的路径并使用 OS 的 GUI 来验证这一点,您可以看到它是指向位于计算机其他位置的实际 python 安装的符号链接(可能是 usr/bin/
).例如,在发现 Python 的多个安装的一台机器上,我看到我的虚拟环境 (.virtualenvs/revconnecion/include/python3.6
) 是原始 /anaconda3/include/python3.6
.
的别名
解决方案:
您可以通过在创建环境时指定 python 版本本身来创建虚拟环境:
python3.7 -m venv sharedvenv
或:
virtualenv -p python3.7
您也可以手动更改符号链接/别名,但上述方法效果更好。使用 Python 本身的特定版本来创建虚拟环境不会产生歧义,显式优于隐式。
运行 which python
在计算机 A 和 B 上验证它是否指向 Python.
的正确版本
virtualenv 没有完整的 Python 安装。相反,它 link 存在于系统 上的安装(仅供参考,link 在 <env>/lib/orig-prefix.txt
中)。 env 的目录树有一些存根和特殊逻辑,但它使用了该安装中的大部分内容。
因此,如果您 运行 activate
在一个系统上没有相同的 Python 在与创建一个 virtualenv 相同的路径上,该脚本将不会正常工作。它可能碰巧挂钩到同一路径上存在的其他东西,但这不是受支持的场景,因此所有赌注都关闭了。
如果您需要 "fully enclosed environment",您可能想看看 pyenv
正是这样做的——安装一个完整的 Python 在你的主目录下。 (或者您可以将 Python 从源安装到主目录下的某个位置——但是 pyenv
可以轻松切换到该安装并返回。)
我有两台计算机(运行 Ubuntu)可以访问一台服务器。两台电脑的共享主目录在服务器上
在计算机 (A) 上安装了 python 3.5,在计算机 (B) 上安装了 python 3.7。我在共享主目录(使用 python 3.7)上从计算机 (B) 创建了一个 virtualenv。
现在虽然可以从计算机 (A) 激活该 virtualenv,但它不使用 "virtualenv-python 3.7",而是系统的 python 3.5。所以从技术上讲,virtualenv 已激活,但实际上并未激活。
请注意 VIRTUAL_ENV 路径设置正确。
我以为 virtualenv-folder 是一个完全封闭的环境,甚至不需要在系统上安装任何 python。那么为什么它不起作用?
简短的回答是因为在计算机 A 和 B 上,您的 python 的路径可能只是一个别名。您可以通过遵循计算机 B 上的路径并使用 OS 的 GUI 来验证这一点,您可以看到它是指向位于计算机其他位置的实际 python 安装的符号链接(可能是 usr/bin/
).例如,在发现 Python 的多个安装的一台机器上,我看到我的虚拟环境 (.virtualenvs/revconnecion/include/python3.6
) 是原始 /anaconda3/include/python3.6
.
解决方案:
您可以通过在创建环境时指定 python 版本本身来创建虚拟环境:
python3.7 -m venv sharedvenv
或:
virtualenv -p python3.7
您也可以手动更改符号链接/别名,但上述方法效果更好。使用 Python 本身的特定版本来创建虚拟环境不会产生歧义,显式优于隐式。
运行 which python
在计算机 A 和 B 上验证它是否指向 Python.
virtualenv 没有完整的 Python 安装。相反,它 link 存在于系统 上的安装(仅供参考,link 在 <env>/lib/orig-prefix.txt
中)。 env 的目录树有一些存根和特殊逻辑,但它使用了该安装中的大部分内容。
因此,如果您 运行 activate
在一个系统上没有相同的 Python 在与创建一个 virtualenv 相同的路径上,该脚本将不会正常工作。它可能碰巧挂钩到同一路径上存在的其他东西,但这不是受支持的场景,因此所有赌注都关闭了。
如果您需要 "fully enclosed environment",您可能想看看 pyenv
正是这样做的——安装一个完整的 Python 在你的主目录下。 (或者您可以将 Python 从源安装到主目录下的某个位置——但是 pyenv
可以轻松切换到该安装并返回。)