【问题标题】:Set default python with pyenv使用 pyenv 设置默认 python
【发布时间】:2019-11-03 11:33:59
【问题描述】:

我尝试通过安装 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

【问题讨论】:

  • type -a python 的输出是什么?
  • $ type -a python python is /usr/bin/python
  • 这意味着您的 pyenv 设置不正确
  • python3 -V 命令呢?我认为 python 命令在某些机器上默认为 python 2.x.x。我就是这种情况。

标签: python macos-catalina pyenv


【解决方案1】:

对我来说 OSX 我不得不把

eval "$(pyenv init --path)"

在我的 ~/.bashrc | ~/.zshrc

请注意,如果没有 --path,它将无法工作

【讨论】:

  • 为我解决了这个问题。谢谢!
  • 谢谢!这对我也有帮助。从旧的 pyenv init - 原则切换到 pyenv init --path 成功了
  • 谢谢,--path 代替 - 在 ZSH 上工作了
  • 谢谢。它对我有用。仅对缺少报价 eval "$(pyenv init --path)" 的一项更正
  • @jharitesh108 已修复 :),谢谢!
【解决方案2】:

如果输出

type -a python 

/usr/bin/python,如果没有显示第二行,那么pyenv只是部分设置。

你应该看起来像 first 行类似

/home/username/.pyenv/shims/python

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

您的搜索路径可能包含: /home/username/.pyenv/bin,但缺少/home/username/.pyenv/shims

(以下 cmets 更新于 2021-01-06):

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

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

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile

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

echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

或更复杂但在大多数情况下相同的行:

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

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

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

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

ls ~/.pyenv/shims

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

之后添加的

附录 2022-01-15:

请注意,pyenv 的初始化方式发生了变化。 如果你有一个旧的 pyenv 版本并且你更新了克隆的存储库,你可能会有类似的东西

eval "$(pyenv init -)"

在你的~/.bash_profile

这个必须改成lile

eval "$(pyenv init -)"
eval "$(pyenv init --path)"

【讨论】:

  • 你试过我的建议了吗?
  • 我必须在 .zshrc 中执行此操作并且它有效,我输入 echo $0 以了解我的终端是否使用 bash_profile 或 .zshrc 文件
【解决方案3】:

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

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

echo $PATH 应该返回类似/Users/matthewpowers/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 的内容。注意~/.pyenv/shims 目录在前面。

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

这个帖子曾经包含有价值的附加信息,由于我不明白的原因被模组删除了。

【讨论】:

    【解决方案4】:

    最近,这仅适用于 macOS:

    if command -v pyenv 1>/dev/null 2>&1; then
      eval "$(pyenv init --path)"
    fi
    

    以前,我只使用了pyenv init -,它在某些时候停止了它的工作。但是,如果您想要自动完成,只需将它们附加在一起,如下所示:

    if command -v pyenv 1>/dev/null 2>&1; then
      eval "$(pyenv init --path)"
      eval "$(pyenv init -)"
    fi
    

    【讨论】:

    • .bash_profile 或 .zprofile 或两者都需要修改才能正常工作
    • 这为我在蒙特雷修复了它。更新python版本不应该这么难!?浪费了 1 小时
    【解决方案5】:

    您可以尝试运行由 pyenv 的同一所有者创建的 pyenv-installer。运行脚本就这么简单

    curl https://pyenv.run | bash
    

    【讨论】:

      【解决方案6】:

      如果您安装了多个版本的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
      

      【讨论】:

        猜你喜欢
        • 2014-06-19
        • 2022-11-25
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多