升级 homebrew python@3.8 后重新安装 Python 包

5

我最近通过homebrew升级了python@3.8

然后我发现我的Python脚本无法链接到我之前使用pip(全局安装而非虚拟环境内安装)安装的全局Python包。

这让我深入理解了macOS上Python的设置,我有几个问题。

  1. 由homebrew安装的pip现在会将所有软件包安装在/usr/local/lib/python3.8/site-packages中。

    • 这是否意味着我需要重新安装我曾经放置在/usr/local/lib/python3.7中(现在仍在那里)的所有Python包?我应该删除后者吗?(同样地,我还看到了一个/usr/local/lib/python3.6目录)
    • 当下一次Python更新到来时,以后管理这些的有效方法是什么?为每个项目创建虚拟环境(我对虚拟环境的使用并不很熟悉)?
  2. 当我运行 brew list | grep python时,我得到以下列表:

python
python3
python@3.8

我可以看到Python@3.8正正确地作为/usr/local/bin/python3符号链接,但我不知道上面列表中的python和python3是什么,因为在/usr/local/Cellar中查看,我发现我有一个空的/usr/local/Cellar/python目录和一个它所链接到的/usr/local/Cellar/python3目录。我可以直接删除这两个文件夹吗?

  1. 最后,在研究所有这些内容时,我惊讶地发现了一个python3可执行文件位于/usr/bin目录下。 当我执行/usr/bin/python3时查看sys.path,我可以看到这是一种由Xcode安装的Python版本,因为它正在寻找各种Xcode.app目录中的库。 由于我的/usr/local/bin处于PATH环境变量的顶部,因此将永远不会调用此Python3,但我想知道为什么需要它以及是否可以将其删除。

我想答案可能是使用虚拟环境,这是我奇迹般地一直避免做的...但愿能在上述问题上得到一些帮助。

编辑:运行brew info pythonbrew info python3返回相同的内容。

python@3.8: stable 3.8.3 (bottled)
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python@3.8/3.8.3_2 (4,268 files, 65.5MB) *
  Poured from bottle on 2020-07-12 at 23:19:08
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/python@3.8.rb

3
这与虚拟环境无关。新的Python安装就是全新的,不会(也不应该因为二进制不兼容)使用另一个Python安装中的包。您需要重新安装需要的包。至于清理Python安装 - 使用“brew doctor”和其他各种“brew”命令。如果“brew”没有删除某些内容(例如“usr/bin/python3”),那么您也不应该这样做。 - MisterMiyagi
1个回答

2
我曾经遇到一个运行Python 3.9的系统类似的问题。一开始我只运行了--dry-run这个命令,因为看起来一切都没问题,但是在安装过程中建议使用brew link命令来覆盖旧的符号链接并创建新的符号链接。
% brew link --overwrite --dry-run python@3.9
Would remove:
% brew link --overwrite python@3.9
Linking /usr/local/Cellar/python@3.9/3.9.1_1... 23 symlinks created
%

正如MisterMiyagi在评论中建议的那样,这是通过brew doctor发现的。

...
Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  python@3.9

“brew doctor” 帮助我解决了我的问题。 - Alex Lenail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接