pyenv-virtualenv问题:激活/停用虚拟环境时Python和PIP未更改
我在我的Ubuntu 16.04 VPS上使用Linuxbrew Homebrew 2.2.5安装了pyenv virtualenv。pyenv版本是:1.2.16。现在当我做这样的测试时:pyenv-virtualenv问题:激活/停用虚拟环境时Python和PIP未更改,python,python-3.x,pip,virtualenv,pyenv,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 which python /home/andre/.pyenv/shims/python /home/
pyenv install 3.8.1
pyenv virtualenv 3.8.1 test
cd /.pyenv/versions/3.8.1/envs/test
pyenv local 3.8.1
which python
/home/andre/.pyenv/shims/python
/home/andre/.pyenv/shims/python --version
Python 3.8.1
然后,输入/离开/.pyenv/versions/3.8.1/envs/test不会激活或停用虚拟环境,我在shell中也没有看到测试用户名:~。我还在那里创建了一个/home/users/test目录和.python版本,但仍然进入/离开目录没有任何作用
根据:
如果在shell中配置了eval$pyenv virtualenv init-,
pyenv virtualenv将在上自动激活/停用virtualenv
输入/离开包含.python版本文件的目录
包含有效虚拟环境的名称,如中所示
pyenv virtualenvs的输出,如venv34或3.4.3/envs/venv34英寸
上面的例子。pyenv使用python版本文件来表示
本地Python版本,可以使用pyenv创建和删除
当地指挥部
所以第一个问题是:为什么这不起作用?为什么在进入/离开包含.python版本文件的目录时不会自动激活/停用虚拟环境?
另外,当我手动激活virtualenv activate test并检查Python版本时,它会打印系统Python版本,而不是来自以下环境的版本:Python 3.8.1:
我只能通过直接参考virtualenv Python获得正确的Python版本,如下所示:
pyenv install 3.8.1
pyenv virtualenv 3.8.1 test
cd /.pyenv/versions/3.8.1/envs/test
pyenv local 3.8.1
which python
/home/andre/.pyenv/shims/python
/home/andre/.pyenv/shims/python --version
Python 3.8.1
无论是否激活virtualenv测试,行为都是相同的。
我希望在激活test之后,命令python-version会返回python3.8.1
那么第二个问题:为什么在激活/停用虚拟环境时不切换pip和python
这些是pyenv病毒吗?还是我做错了什么?事实证明,为了在进入/离开目录时自动激活/停用venv,其中的.python版本文件必须包含venv名称,而不是与该venv关联的python版本 因此,执行: pyenv本地3.8.1 创建一个.python版本文件,该文件仅包括python版本3.8.1。 然后,输入/离开包含.python版本文件的目录将设置/取消设置该文件中指定的python版本,但不会激活/停用任何venv 要创建一个既能激活虚拟环境又能设置python版本的.python版本文件,该命令应类似于:pyenv local test,其中test是使用以下命令创建的venv: pyenv virtualenv 3.8.1测试 因此,将3.8.1更改为在.python版本中进行测试解决了这个问题。 在我这样做之后,当进入/离开包含.python版本的目录时,venv被激活/停用 但是Python版本仍然没有更改为本例中与venv相关的版本3.8.1 然后我发现我的.profile中有两行代码导致了这个问题: 别名python=/home/linuxbrew/.linuxbrew/bin/python3 别名pip=/home/linuxbrew/.linuxbrew/bin/pip3
删除这些行后,一切正常。事实证明,为了在进入/离开目录时自动激活/停用venv,其中的.python版本文件必须包含venv名称,而不是与该venv关联的python版本 因此,执行: pyenv本地3.8.1 创建一个.python版本文件,该文件仅包括python版本3.8.1。 然后,输入/离开包含.python版本文件的目录将设置/取消设置该文件中指定的python版本,但不会激活/停用任何venv 要创建一个既能激活虚拟环境又能设置python版本的.python版本文件,该命令应类似于:pyenv local test,其中test是使用以下命令创建的venv: pyenv virtualenv 3.8.1测试 因此,将3.8.1更改为在.python版本中进行测试解决了这个问题。 在我这样做之后,当进入/离开包含.python版本的目录时,venv被激活/停用 但是Python版本仍然没有更改为本例中与venv相关的版本3.8.1 然后我发现我的.profile中有两行代码导致了这个问题: 别名python=/home/linuxbrew/.linuxbrew/bin/python3 别名pip=/home/linuxbrew/.linuxbrew/bin/pip3
删除这些线路后,一切正常。您是如何想出这个解决方案的?这是实验性的还是您已经找到了一些关于pyenv的好信息源?我的意思是pyenv很棒,但是官方文档对底层细节有些模糊。。。我认为这让很多人感到困惑,因为python版本建议它包含python版本,但实际上它必须包含文档中明确说明的虚拟环境名称,但是
但我还是犯了这个错误。。。第二个问题是我自己引起的,谢谢!我永远不会明白这一点,因为pyenv local-help返回用法:pyenv local。这太骗人了。你是怎么想出这个解决办法的?这是实验性的还是您已经找到了一些关于pyenv的好信息源?我的意思是pyenv很棒,但是官方文档对底层细节有些模糊。。。我认为这对很多人来说都很困惑,因为python版本建议它包含python版本,但事实上它必须包含虚拟环境名称,这在文档中有明确的说明,但我还是犯了这个错误。。。第二个问题是我自己引起的,谢谢!我永远不会明白这一点,因为pyenv local-help返回用法:pyenv local。这是非常具有欺骗性的。