使用 pyenv 设置默认 python

AJ-*_*AJ- 10 python pyenv macos-catalina

我尝试通过安装 PYENV 和 PYPIP 在我的 macOS Catalina 10.15.1 上升级我的 Python 版本,并将全局和本地设置为版本 3.8.0。但是当我尝试使用 python 版本时,它仍然显示内置在 MacOS 操作系统中的 python 版本。缺少哪一部分?

$ pyenv -v
pyenv 1.2.14

$ pypip -v
zsh: command not found: pypip

$ pyenv versions
  system
* 3.8.0 (set by /Users/aj/.python-version)

$ pyenv global
3.8.0

$ pyenv local
3.8.0

$ python -V
Python 2.7.16
Run Code Online (Sandbox Code Playgroud)

Dav*_*ido 52

对于我来说 OSX 我必须把

eval "$(pyenv init --path)"
Run Code Online (Sandbox Code Playgroud)

在我的 ~/.bashrc | 里面 〜/.zshrc

请注意,如果没有--path它就不起作用

  • 这为我解决了。谢谢! (3认同)
  • 谢谢!这也对我有帮助。从旧的“pyenv init -”原则切换到“pyenv init --path”就成功了 (2认同)

gel*_*ida 17

如果输出

type -a python 
Run Code Online (Sandbox Code Playgroud)

/usr/bin/python,如果没有显示第二行,则 pyenv 仅部分设置。

你应该看起来像是第一行

/home/username/.pyenv/shims/python
Run Code Online (Sandbox Code Playgroud)

这意味着你的 pyenv 设置不正确。它只是部分设置的。缺少的是重定向到正确版本的 python 的 pyenv 垫片。

可能您的搜索路径包含: /home/username/.pyenv/bin,但它丢失了/home/username/.pyenv/shims

(以下评论于 2021 年 1 月 6 日更新):

通常你的 ~/.bashrc 中应该有三行

您似乎拥有的前两个(或等效的东西)是:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

另一方面,您似乎缺少一行,看起来像:

echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

或者更详细但在大多数情况下相同的行:

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

尝试将这些缺失的行之一添加到 .bashrc 中,看看 pyenv 是否工作得更好。

您也可以手动添加 到搜索路径,但通常这应该通过命令~/.pyenv/shims/python完成eval "$(pyenv init -)"

如果~/.pyenv/shims已经在您的搜索路径中,请检查

ls ~/.pyenv/shims
Run Code Online (Sandbox Code Playgroud)

该目录是否存在并包含名为 python 的可执行文件。通常这应该是在完成之后添加的pyenv install 3.8.0

附录 2022 年 1 月 15 日:

请注意 pyenv 的初始化方式发生了变化。如果您有较旧的 pyenv 版本并且更新了克隆存储库,您可能会遇到类似的情况

eval "$(pyenv init -)"
Run Code Online (Sandbox Code Playgroud)

在你的~/.bash_profile(或你的〜/.zshrc或...取决于你的shell)

这必须改变一些

eval "$(pyenv init -)"
eval "$(pyenv init --path)"
Run Code Online (Sandbox Code Playgroud)


Yar*_*Yar 13

如果您安装了多个版本的 python(您可以使用pyenv versions查看所有已安装的版本),您可以将特定版本设置为localglobal版本:

$ pyenv versions
  system
* 2.7.18
* 3.7.8
  3.9.9

$ pyenv global 3.9.9

$ pyenv versions
  system
  2.7.18
  3.7.8
* 3.9.9
Run Code Online (Sandbox Code Playgroud)


Pow*_*ers 5

正如 gelondia 提到的,您可能需要将此代码添加到您的代码中~/.bash_profile才能PATH正确设置:

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi
Run Code Online (Sandbox Code Playgroud)

echo $PATH应该返回类似的东西/Users/matthewpowers/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin。请注意,该~/.pyenv/shims目录位于前面。

我添加了一个单独的答案,因为我认为您应该添加一些~/.bash_profile与 gelonida 建议的代码不同的代码。

这篇文章曾经包含有价值的附加信息,但由于我不明白的原因,这些信息被模组删除了。