我在Ubuntu 16.04 VPS上使用Linuxbrew(Homebrew 2.2.5)安装了pyenv-virtualenv
。 pyenv版本为:1.2.16
。现在,当我进行这样的测试时:
pyenv install 3.8.1
pyenv virtualenv 3.8.1 test
cd /.pyenv/versions/3.8.1/envs/test
pyenv local 3.8.1
然后进入/离开/.pyenv/versions/3.8.1/envs/test
不会激活以停用虚拟环境,并且在外壳中看不到(test) username:~
。我还创建了一个/home/users/test
目录,并在那里创建了.python-version
,但仍然进入/离开目录没有任何作用。
如果在外壳程序中配置了eval“ $(pyenv virtualenv-init-)”, pyenv-virtualenv将在以下位置自动激活/停用virtualenvs 输入/离开包含.python-version文件的目录,该文件 包含有效虚拟环境的名称,如 pyenv virtualenvs的输出(例如venv34或3.4.3 / envs / venv34 in 上面的示例)。 pyenv使用.python-version文件来表示 本地Python版本,可以使用pyenv创建和删除 本地命令。
第一个问题是:为什么这不起作用?为什么在进入/离开包含.python-version
文件的目录时未自动激活/取消激活虚拟环境?
此外,当我手动激活pyenv activate test
的virtualenv并检查Python版本时,它会打印系统的Python版本,而不是环境中的版本:Python 3.8.1
:
python --version
Python 3.7.6
我只能像这样直接引用virtualenv垫片来获得正确的Python版本:
which python
/home/andre/.pyenv/shims/python
/home/andre/.pyenv/shims/python --version
Python 3.8.1
无论是否激活virtualenv“测试”,行为都是相同的。
我希望激活“测试”后命令python --version
返回Python 3.8.1
第二个问题:为什么在激活/停用虚拟环境时未切换pip
和python
?
这些pyenv错误吗?还是我做错了什么?
答案 0 :(得分:2)
事实证明,为了在进入/离开目录时自动激活/停用venv
,其中的.python-version
文件必须包含venv name
而不是{{1} }与该Python version
因此执行:
venv
创建一个pyenv local 3.8.1
文件,该文件仅包含Python版本.python-version
。
然后进入/离开包含3.8.1
文件的目录将设置/取消设置该文件中指定的Python版本,但不会激活/停用任何.python-version
。
要创建同时执行以下两项操作的venv
文件:激活虚拟环境并设置Python版本,该命令应类似于:.python-version
,其中pyenv local test
是使用以下命令创建的venv:
test
。
因此,将pyenv virtualenv 3.8.1 test
中的3.8.1
更改为test
可以解决此问题。
完成此操作后,进入/离开包含.python-version
的目录时,venv
被激活/停用。
但是Python版本仍未更改为与.python-version
(在这种情况下为venv
)关联的版本
然后我发现3.8.1
中有两行引起了此问题:
.profile
删除这些行后,一切正常。