繁体   English   中英

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

[英]Issues with pyenv-virtualenv: Python and PIP not changed when activating / deactivating virtual environment

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

根据文档

如果 eval "$(pyenv virtualenv-init -)" 在您的 shell 中配置,pyenv-virtualenv 将在进入/离开包含 .python-version 文件的目录时自动激活/停用 virtualenvs,该文件包含有效虚拟环境的名称为显示在 pyenv virtualenvs 的输出中(例如,上面示例中的 venv34 或 3.4.3/envs/venv34)。 pyenv 使用 .python-version 文件来表示本地 Python 版本,可以使用 pyenv local 命令创建和删除。


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

此外,当我手动激活 virtualenv pyenv activate test然后检查 Python 版本时,它会打印系统 Python 版本,而不是来自环境的版本: Python 3.8.1

python --version
Python 3.7.6

我只能通过像这样直接引用 virtualenv shims Python 来获得正确的 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 错误吗? 还是我做错了什么?

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

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

要创建一个.python-version文件,它可以同时执行:激活虚拟环境并设置 Python 版本,命令应如下所示: pyenv local test其中test是使用以下命令创建的 venv: pyenv virtualenv 3.8.1 test

因此更改3.8.1以在.python-version进行test解决了该问题。 完成此操作后,当进入/离开包含.python-version目录时, venv被激活/停用。

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

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

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

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

我也有类似的问题。 解决方案是更改我放入~/.bashrc的条目。 我继续导出变量export PYENV_ROOT="$HOME/.pyenv"并添加了行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#issuecomment-852599456,https://www.giters.com/pyenv/pyenv-virtualenv/issues/407]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM