Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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
pyenv-virtualenv问题:激活/停用虚拟环境时Python和PIP未更改_Python_Python 3.x_Pip_Virtualenv_Pyenv - Fatal编程技术网

pyenv-virtualenv问题:激活/停用虚拟环境时Python和PIP未更改

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/

我在我的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/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。这是非常具有欺骗性的。