首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyenv-virtualenv的问题:在激活/停用虚拟环境时,Python和PIP没有改变

pyenv-virtualenv的问题:在激活/停用虚拟环境时,Python和PIP没有改变
EN

Stack Overflow用户
提问于 2020-02-13 16:37:43
回答 2查看 7.5K关注 0票数 9

我在我的Ubuntu16.04VPS上安装了使用Linuxbrew (Homebree2.2.5)的pyenv-virtualenv。pyenv版本是:1.2.16。当我做这样的测试时:

代码语言:javascript
复制
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不会激活虚拟环境,也不会在我的shell中看到(test) username:~。我还在那里创建了一个/home/users/test目录和.python-version,但是仍然输入/离开目录什么都不做。

文档相一致

如果您的shell中配置了eval "$(pyenv virtualenv-init -)“,那么pyenv-virtualenv将在输入/离开目录时自动激活/停用虚拟env,其中包含一个包含有效虚拟环境名称的. pyenv文件,如上面例中的pyenv虚拟环境输出所示(例如,venv34或3.4.3/envs/venv34 34)。文件被pyenv用来表示本地Python版本,并且可以使用pyenv本地命令创建和删除。

,所以第一个问题是:为什么这不起作用?为什么虚拟环境在输入/离开包含文件的目录时没有自动激活/停用?

另外,当我手动激活pyenv activate test并检查Python版本时,它会打印系统Python版本,而不是从环境中打印出来的版本:Python 3.8.1

代码语言:javascript
复制
python --version
Python 3.7.6

我只能通过直接引用像这样的virtualenv shims Python才能获得正确的Python版本:

代码语言:javascript
复制
which python
/home/andre/.pyenv/shims/python
/home/andre/.pyenv/shims/python --version
Python 3.8.1

无论启动与否,虚拟化“测试”的行为都是相同的。我希望在激活"test“之后,命令python --version返回Python 3.8.1

那么第二个问题:为什么在激活/失活虚拟环境时不切换pip python

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-31 01:25:33

结果表明,为了在输入/离开目录时自动激活/禁用venv.python-version文件必须包含venv name,而不是与该venv关联的Python version

因此,执行:pyenv local 3.8.1创建一个.python-version文件,其中只包含3.8.1版本。然后,输入/离开包含.python-version文件的目录将设置/取消该文件中指定的Python版本,但不会激活/禁用任何venv

要创建一个同时执行这两项任务的.python-version文件:激活虚拟环境并设置Python,命令应该是:pyenv local test,其中test是用:pyenv virtualenv 3.8.1 test创建的venv。

因此,将3.8.1更改为.python-version中的test解决了这个问题。完成此操作后,当输入/离开包含venv的目录时,.python-version被激活/停用。

但是Python版本仍未更改为与venv关联的版本(在本例中为3.8.1)。

然后我发现我的.profile中有两行代码导致了这个问题:

代码语言:javascript
复制
alias python=/home/linuxbrew/.linuxbrew/bin/python3
alias pip=/home/linuxbrew/.linuxbrew/bin/pip3

删除这些行后,一切都按预期工作。

票数 8
EN

Stack Overflow用户

发布于 2022-01-15 03:16:33

我也有类似的问题。解决方案是更改我在~/.bashrc中的条目。我继续导出变量export PYENV_ROOT="$HOME/.pyenv"并添加了行eval "$(pyenv init --path)"

完整地运行下面的命令,它将向您正在使用的用户的~/.bashrc添加必要的条目。

代码语言:javascript
复制
read -r -d '' FILE_CONTENT << 'HEREDOC'
BEGIN

# >>>>>>
# pyenv configurations.

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)" # This only sets up the path stuff.
eval "$(pyenv init -)" # This makes pyenv work in the shell.
eval "$(pyenv virtualenv-init -)" # Enabling virtualenv so it works natively.
# <<<<<<

END
HEREDOC
echo -n "${FILE_CONTENT:6:-3}" | tee -a ~/.bashrc

注意:在Manjaro (Linux,基于Arch的)上进行了测试。

谢谢!=D

参考文献: https://github.com/pyenv/pyenv-installer,https://github.com/pyenv/pyenv,https://realpython.com/intro-to-pyenv/,https://github.com/pyenv/pyenv-virtualenv/issues/390#issuecomment-852599456,https://www.giters.com/pyenv/pyenv-virtualenv/issues/407

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60212658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档