pyenv-virtualenv问题:激活/停用虚拟环境时,Python和PIP不变

时间:2020-02-13 16:37:43

标签: python python-3.x pip virtualenv pyenv

我在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,但仍然进入/离开目录没有任何作用。

根据documentation

如果在外壳程序中配置了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

第二个问题:为什么在激活/停用虚拟环境时未切换pippython

这些pyenv错误吗?还是我做错了什么?

1 个答案:

答案 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

删除这些行后,一切正常。