【问题标题】:How to upgrade python on mac if multiple versions (including upgraded version) are already installed?如果已经安装了多个版本(包括升级版),如何在 mac 上升级 python?
【发布时间】:2021-01-10 16:58:06
【问题描述】:

我使用命令pip3 install --upgrade pip升级了pip;然后,在终端窗口中打印了以下内容:

DEPRECATION: Python 3.5 reached the end of its life on September 13th,
2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021.
pip 21.0 will remove support for this functionality.

在线搜索有关在 mac 上升级 python 的正确方法将我引向两个来源 (1) 和 (2)。第二个来源提到修改.profile 和bash 脚本;尽管这些堆栈交换论坛(如thisthat)上的类似问题提供了一些帮助,但这些都是我难以理解的事情。但是,使用第一个来源的建议,我想我已经确定了一个潜在的未来问题(我读了 virtual venv 可能是一个很好的解决方案)。具体来说,

$ which python 
/usr/bin/python

$ which python3
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3

$ brew info python
python@3.8: stable 3.8.5 (bottled)
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python@3.8/3.8.5 (4,331 files, 66.8MB)
  Poured from bottle on 2020-09-23 at 04:16:21
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/python@3.8.rb
License: Python-2.0
==> Dependencies
Build: pkg-config ✔
Required: gdbm ✔, openssl@1.1 ✔, readline ✔, sqlite ✔, xz ✔
==> Caveats
Python has been installed as
  /usr/local/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
  /usr/local/opt/python@3.8/libexec/bin

You can install Python packages with
  pip3 install <package>
They will install into the site-package directory
  /usr/local/lib/python3.8/site-packages

See: https://docs.brew.sh/Homebrew-and-Python
==> Analytics
install: 435,972 (30 days), 1,606,776 (90 days), 3,198,770 (365 days)
install-on-request: 158,335 (30 days), 466,841 (90 days), 519,965 (365 days)
build-error: 0 (30 days)

我认为这意味着我的 mac 上安装了 python 2、python 3.5 和 python 3.8。我尝试使用以下命令的多个版本(即pythonpython3python3.8 等)升级我的 python 版本:

$ pip3 install --upgrade python
ERROR: Could not find a version that satisfies the requirement python (from versions: none)
ERROR: No matching distribution found for python

我已经安装了 python 3.8,但我显然运行的是 3.5;如何升级我的python版本?我该如何“清理这个烂摊子”?如果相关,我正在运行 macOS High Sierra 10.13.6,我喜欢/使用的唯一文本编辑器是 Atom(请不要对 vim 提出建议)。

编辑#1:

关注the steps from this post后,在TextEdit中打开了以下内容。

# Setting PATH for Python 3.5
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.5/bin:${PATH}"
export PATH

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

我注意到它在顶部写着Python 3.5。我是否用PATH=/usr/local/bin 覆盖给定路径PATH="/Library/Frameworks/Python.framework/Versions/3.5/bin:${PATH}"?我想运行 python 3.8;这会做我想要的吗?

编辑 #2:

按照编辑后的答案中的建议,在终端中运行 grep PATH $HOME/.* 在终端窗口中输出以下内容:

grep: /Users/username/.bash_sessions: Is a directory
grep: /Users/username/.cache: Is a directory
grep: /Users/username/.config: Is a directory
grep: /Users/username/.cups: Is a directory
grep: /Users/username/.git: Is a directory
grep: /Users/username/.idlerc: Is a directory
grep: /Users/username/.lightkurve-cache: Is a directory
grep: /Users/username/.local: Is a directory
grep: /Users/username/.matplotlib: Is a directory
grep: /Users/username/.npm: Is a directory
grep: /Users/username/.nvm: Is a directory
grep: /Users/username/.oracle_jre_usage: Is a directory
grep: /Users/username/.ssh: Is a directory
grep: /Users/username/.subversion: Is a directory
grep: /Users/username/.vnc: Is a directory

所以,我搜索包含 python 3.5 的目录。如果我在ls 而在/Users/username/Library/ 中,则Frameworks 未列出,所以我在其他地方搜索。但这让我很担心,因为我看到了PATH="/Library/Frameworks/Python.framework/Versions/3.5/bin:${PATH}"(来自编辑#1)。

$ pwd
/Users/username

$ cd .local/
$ ls 
share

$ cd share
$ ls
virtualenvs

$ cd virtualenvs
$ ls
PyCodes-_a3khG54    

$ cd PyCodes-_a3khG54
$ ls
bin include lib src

目录src 为空; include 包含 python3.5mlib 包含 python3.5

$ cd bin
$ ls

activate        f2py            python
activate.csh        f2py3           python-config
activate.fish       f2py3.5         python3
activate_this.py    pip         python3.5
easy_install        pip3            wheel
easy_install-3.5    pip3.5

这里不应该有我可以编辑的文件吗?

【问题讨论】:

    标签: python-3.x macos pip homebrew upgrade


    【解决方案1】:

    您显示的输出:

    brew info python
    

    告诉你答案!

    如果我解释一下,它会说:

    如果您想通过输入python3pip3 来运行Python 3.8pip,您需要将/usr/local/bin 首先放在PATH 上。相反,如果您想通过键入 pythonpip 来运行它们,即没有版本,则需要将 /usr/local/opt/python@3.8/libexec/bin 首先放在 PATH 上。

    说出在哪里更改PATH 并不是那么简单,因为设置位置有很多可能性。您最好的选择可能是查看 HOME 目录中的所有 "dotfiles",所以:

    grep PATH $HOME/.*
    

    然后你需要打开看起来最有可能的文件,并在它设置的最后一个位置之后添加,例如:

    export PATH=/usr/local/bin:$PATH
    

    要真正激活它,最简单的可能是启动一个新终端并运行:

    echo $PATH
    

    如果看起来正确,请使用旧 PATH 关闭终端,否则您会感到困惑。如果它看起来不正确或导致错误,请立即关闭新的终端窗口并在原始终端中重试编辑。


    如果您想知道您在键入 pythonpip 时实际运行的是什么,请运行:

    type python
    type pip
    

    如果您想知道您在输入 python3pip3 时实际运行的是什么,请运行:

    type python3
    type pip3
    

    您可以像这样解释最后几个type 命令的输出:

    • 如果它们在开头附近包含单词local,可能是/usr/local/XXX,它们很可能是由homebrew 或您自己编译或安装的东西提供的,

    • 如果它们以 /Library 开头或包含单词 Frameworks,则它们可能是由 Apple 提供的并且是相当新的,

    • 如果它们以 /usr/bin 开头但没有单词 local,它们可能是 Apple 提供的较旧的二进制文件,

    • 如果它说你的命令是“aliased”,这意味着你在你的“dotfiles”中的某处有一个类似alias python="something crazy"的命令(见上文)。就个人而言,我会删除它,因为它只是增加了另一层间接和混乱...... YMMV 在这个上。

    切勿删除或更改 Apple 提供的任何内容 - 否则未来的 ma​​cOS 升级可能会失败。


    所以,希望我们已经确定您需要使用pythonpip,或者使用python3pip3 并且它们应该匹配,即当您安装一个包时,您正在安装它您使用的 Python 解释器可以使用的位置。因此,“匹配” 安装的示例如下所示:

    type python3
    python3 is /usr/local/bin/python3
    
    python3 -V
    Python 3.8.5
    
    pip3 -V
    pip 20.1.1 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)
    
    type pip3
    pip3 is hashed (/usr/local/bin/pip3)
    

    请注意我的两个二进制文件的名称中如何包含 local,因此它们都来自 homebrew 以及 Python 版本如何与 pip3 -V 命令中的版本匹配所以我可以确定我的 Python 解释器安装在正确的位置。


    为什么很难说在哪里编辑你的PATH?答案是这取决于很多事情。这取决于您的 shell,因此您可能会看到运行 echo $SHELL 的建议,但这只会告诉您您的默认 shell,而不是您当前的 shell,您可以使用ps -o comm= $$ 找到它。但是您的登录 shell 可能是 bash,并且您可能在 bash 配置文件中执行了 fish。或者您可以使用iTerm2Terminalxterm,并且您可能已经更改了该终端程序的“首选项” 中的shell。

    【讨论】:

    • "如果您想运行 Python 3.8 并通过键入 python3pip3 来运行 Python 3.8,则需要将 /usr/local/bin 首先放在您的 PATH 上"。 This source 解释了如何做到这一点,但我真的不明白如何做到这一点。我想有一个文件可以使用文本编辑器(如 Atom)打开并在其底部添加 PATH=/usr/local/bin;它是否正确?如果是这样,我如何找到这个文件?
    • 抱歉,有时很难判断人们在哪里。我添加了一些进一步的解释。请再看看。
    • 别担心,感谢您的帮助!我还没有弄明白,但我认为你已经提供了足够的信息让普通人觉得你的回答很有帮助。
    • 我想我找到了正确的文件。它看起来像:# Setting PATH for Python 3.5# The original version is saved in .bash_profile.pysavePATH="/Library/Frameworks/Python.framework/Versions/3.5/bin:${PATH}"# export PATH(我用下面的那一行替换了这一行)export PATH=/usr/local/bin:$PATHexport NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] &amp;&amp; \. "$NVM_DIR/nvm.sh" # This loads nvm[ -s "$NVM_DIR/bash_completion" ] &amp;&amp; \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion 编辑没有区别。接下来我可以尝试什么?
    • 字符用完了; $ echo $PATH 返回以下内容:/Users/username/.nvm/versions/node/v11.9.0/bin:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/3.5/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/opt/X11/bin:/opt/ImageMagick/bin
    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 2020-06-24
    • 2018-10-27
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    相关资源
    最近更新 更多