如果已经安装了多个版本(包括升级版本),如何在Mac上升级python?

时间:2020-09-24 11:47:37

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

我使用命令pip升级了pip3 install --upgrade 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)上的类似问题有所帮助,但这些都是我难以理解的事情。但是,我认为使用第一来源的建议,我已经确定了未来的潜在问题(我读过虚拟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="/Library/Frameworks/Python.framework/Versions/3.5/bin:${PATH}"覆盖给定的路径PATH=/usr/local/bin?我想运行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的目录。如果我Frameworksls中时未列出/Users/username/Library/,所以我在其他地方搜索。但这让我担心,因为我看到了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.5m,而lib包含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

这里没有可以编辑的文件吗?

1 个答案:

答案 0 :(得分:0)

您显示的输出:

brew info python

告诉你答案!

如果我释义,它说:

如果要通过键入python3pip3运行 Python 3.8 pip ,则需要先将/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 或您自己编译或安装的东西提供,< / p>

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

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

  • 如果它说您的命令是“ aliased” ,则表示您的“ dotfiles” 中某处有alias python="something crazy"这样的命令(请参阅以上)。就我个人而言,我将其删除,因为它仅增加了另一层间接性和混乱性……YMMV。

切勿删除或更改Apple提供的任何内容,否则将来的 macOS 升级可能会失败。


因此,希望我们已经确定您需要使用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,所以它们都来自自制软件,并且 Python 版本与{{ 1}}命令,因此可以确保将其安装在 Python 解释器的正确位置。


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