当前位置: 首页 > 知识库问答 >
问题:

pyenv-Virtual alenv的问题:激活/停用虚拟环境时Python和PIP没有更改

卢志业
2023-03-14

我使用Linuxbrew(Homebrew 2.2.5)在我的Ubuntu 16.04 VPS上安装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/version/3.8.1/envs/test不会激活停用虚拟环境,我在shell中看不到(test)用户名:~。我还在那里创建了一个/home/user/test目录和. python-version,但仍然进入/离开目录什么也不做。

根据文档:

如果在 shell 中配置了 eval “$(pyenv virtualenv-init -)”,则在进入/离开包含 .python 版本文件的目录时,pyenv-virtualenv 将自动激活/停用虚拟环境,该文件包含有效虚拟环境的名称,如上例所示(例如,venv34 或 3.4.3/envs/venv34)。pyenv 使用 .python 版本文件来表示本地 Python 版本,并且可以使用 pyenv 本地命令创建和删除这些文件。

< br >

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

此外,当我手动激活虚拟env时,Pyenv激活测试,然后检查Python版本,它打印系统Python版本,而不是来自环境的版本:Python 3.8.1

python --version
Python 3.7.6

我只能像这样直接参考Virtual alenv shims Python才能得到正确的Python版本:

which python
/home/andre/.pyenv/shims/python
/home/andre/.pyenv/shims/python --version
Python 3.8.1

无论是否激活virtualenv“测试”,行为都是一样的。我希望在激活“test”之后,命令< code>python - version返回< code>Python 3.8.1

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

这些是皮恩夫虫子吗?还是我做错了什么?

共有2个答案

韩安顺
2023-03-14

事实证明,为了在进入/离开目录时自动激活/停用venv,其中的. python-version文件必须包含venv名称而不是与该venv关联的Python版本

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

要创建一个 .python 版本文件,该文件将同时执行这两项操作:激活虚拟环境并设置 Python 版本,该命令应如下所示:pyenv 本地测试,其中测试是使用:pyenv 虚拟env 3.8.1 测试创建的 venv。

因此,在中将3.8.1更改为 。python版本 修复了该问题。完成此操作后,当进入/离开包含.python版本的目录时,venv被激活/停用。

但Python版本仍然没有更改为与venv关联的版本(在本例中3.8.1>)

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

alias python=/home/linuxbrew/.linuxbrew/bin/python3
alias pip=/home/linuxbrew/.linuxbrew/bin/pip3

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

饶滨海
2023-03-14

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

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

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 # issue comment-852599456,https://www.giters.com/pyenv/pyenv-virtualenv/issues/407]

 类似资料:
  • 我做了一个虚拟环境,我可以在命令提示符下激活它,但它不能用my_venv2\脚本\activate.bat激活它,我也不能在py魅力的终端中激活它

  • 不熟悉在虚拟环境中运行Python,会弄乱Django,无法激活虚拟环境。 在过去的4个小时里,试图在本地终端/VS代码上激活虚拟环境(venv),但运气不佳。 避免了“sudo pip install virtualenv”,因为我试图避免以root用户身份安装和使用不同的目录路径等。 使用缓存的virtualenv-20.0.31-py2.py3-none-any.whl(4.9 MB)收集v

  • 问题内容: 我在Windows Server 2008 R2计算机上全新安装了Python 3.3.4。我已经成功地在全球范围内成功安装了最新版本的Setuptools,Pip和Virtualenv: 现在,当我尝试使用设置虚拟环境时,将获得以下堆栈跟踪: 我以前从未见过此错误,并且堆栈跟踪对我没有任何意义。我可以从Python Shell成功。谁能帮我解决这个问题? 更新 当我提供标志时,env

  • 我已经设置了PyCharm,创建了我的虚拟环境(通过虚拟环境命令,或者直接在PyCharm中),并将该环境作为我的解释器激活。一切都很好。 但是,如果我使用“工具,打开终端”打开一个终端,所提供的shell提示符不是使用虚拟env我仍然需要在终端中使用< code > source ~/envs/some env/bin/activate 来激活它。 另一种方法是在外壳中激活环境,并从该环境运行

  • 这份教程是帮助你安装和使用 Python 的包 本指南会告诉你如何安装和使用必要的工具。值得注意的是 Python 可以做许多许多的事情,至于你如何去安装和管理你的依赖可能会根据你项目的不同而不同。这份指南更多是开发和部署网络服务(包括 web 应用),但是这份指南同样适用于帮助你管理任何项目的开发和测试环境。 注意:这份指南是在 Python 3 版本下完成的,如果你由于不可抗拒的原因仍然在使用

  • 我所期望的 编辑:解决方案相关为什么虚拟环境从我的shell继承$PYTHONPATH?