您是否需要在brew switch之前/之后运行brew unlink/brew link?

mrg*_*oom 5 macos homebrew python-3.x

您需要在之前brew unlink/brew link之后运行吗brew switch

根据此链接https://docs.brew.sh/Tips-N'-Tricks#activate-a-previously-installed-version-of-a-formula brew switch激活以前安装的公式版本。

看起来我安装了一些“系统”python(它安装在 下/usr/bin/python3),但它不是与brew一起安装的,如果我安装了,我可以看到它brew unlink python@3.9并且brew unlink python@3.7

python -V
Python 3.7.3

/usr/bin/python3 -V
Python 3.7.3

which python3
/usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

然后我切换到 python@3.9:

brew switch python@3.9 3.9.0_1
python -V
Python 3.9.0
Run Code Online (Sandbox Code Playgroud)

然后我切换到 python@3.7:

brew switch python@3.7 3.7.9
python -V
Python 3.9.0
Run Code Online (Sandbox Code Playgroud)

但它仍然向我显示Python 3.9.0,ls -l /usr/local/bin | grep python3也向我显示python3.9。

我还尝试在每次brew switch 测试之前取消所有brew python 包的链接:

brew unlink python@3.7 && brew unlink python@3.9
brew switch python@3.7 3.7.9
python -V
Python 3.7.3


brew unlink python@3.7 && brew unlink python@3.9
brew switch python@3.9 3.9.0_1
python -V
Python 3.9.0
Run Code Online (Sandbox Code Playgroud)

因此,似乎由于某种原因,它会自动链接到brew switch上的python@3.9,而不是为python@3.7这样做,为什么?里面有/还是brew switch应该手动完成?brew unlinkbrew link

我可以通过brew unlink/brew link来切换 python 版本吗?

更新:

似乎新版本brew没有switch

Error: Calling `brew switch` is disabled! Use `brew link` @-versioned formulae instead.

brew --version
Homebrew 2.7.7
Homebrew/homebrew-core (git revision 918f0; last commit 2021-02-04)
Homebrew/homebrew-cask (git revision 2b83c; last commit 2021-02-04)
Run Code Online (Sandbox Code Playgroud)

所以现在应该是这样的:

brew unlink python@3.7 && brew unlink python@3.9
brew link python@3.7
python -V
Python 3.7.9
Run Code Online (Sandbox Code Playgroud)

Ort*_*kni 4

brew switch不再是一个brew命令。

\n
$ brew --version                                                                    \nHomebrew 3.0.0\nHomebrew/homebrew-core (git revision 8d644; last commit 2021-02-10)\n\n$ brew switch mariadb@10.3                                                  \nError: Unknown command: switch\n
Run Code Online (Sandbox Code Playgroud)\n

您在问题中提到的提示和技巧页面也删除了任何提及brew switch.

\n
\n

安装以前版本的公式

\n

支持安装某些公式的特定版本\nis 的方法,以查看是否有可用的版本化公式(例如 gcc@7)。如果您\xe2\x80\x99 正在寻找的版本\xe2\x80\x99 不可用,请考虑使用brew\nextract。

\n
\n

要么,没有提及brew switchin man brew

\n

所以看来你的问题已经被 Homebrew 维护者上游解决了。

\n

请注意,自Homebrew 2.6.0brew switch以来已弃用。

\n

==更新==

\n

如果我们以 python@3.7 和 python@3.9 为例。brew info python@3.7我们应该首先检查和的输出brew info python@3.9。我们看到 python@3.7 是keg-only

\n
python@3.7 is keg-only, which means it was not symlinked into /usr/local,\nbecause this is an alternate version of another formula.\n
Run Code Online (Sandbox Code Playgroud)\n

python@3.9 的情况并非如此,因为它现在是 python 公式的别名。这意味着安装python@3.9会自动运行brew link python@3.9而安装python@3.7不会运行brew link python@3.7

\n

然后要列出哪些文件将与 python@3.9 链接,您可以运行brew link --dry-run python@3.9

\n
Would link:\n/usr/local/bin/2to3\n/usr/local/bin/2to3-3.9\n/usr/local/bin/easy_install-3.9\n/usr/local/bin/idle3\n/usr/local/bin/idle3.9\n/usr/local/bin/pip3\n/usr/local/bin/pip3.9\n/usr/local/bin/pydoc3\n/usr/local/bin/pydoc3.9\n/usr/local/bin/python3\n/usr/local/bin/python3-config\n/usr/local/bin/python3.9\n/usr/local/bin/python3.9-config\n/usr/local/bin/wheel3\n/usr/local/share/man/man1/python3.1\n/usr/local/share/man/man1/python3.9.1\n/usr/local/lib/pkgconfig/python-3.9-embed.pc\n/usr/local/lib/pkgconfig/python-3.9.pc\n/usr/local/lib/pkgconfig/python3-embed.pc\n/usr/local/lib/pkgconfig/python3.pc\n/usr/local/Frameworks/Python.framework/Headers\n/usr/local/Frameworks/Python.framework/Python\n/usr/local/Frameworks/Python.framework/Resources\n/usr/local/Frameworks/Python.framework/Versions/3.9\n/usr/local/Frameworks/Python.framework/Versions/Current\n
Run Code Online (Sandbox Code Playgroud)\n

要列出哪些文件将与 python@3.7 链接,请运行brew link --dry-run python@3.7

\n
Would link:\n/usr/local/bin/2to3\n/usr/local/bin/2to3-3.7\n/usr/local/bin/easy_install-3.7\n/usr/local/bin/idle3\n/usr/local/bin/idle3.7\n/usr/local/bin/pip3\n/usr/local/bin/pip3.7\n/usr/local/bin/pydoc3\n/usr/local/bin/pydoc3.7\n/usr/local/bin/python3\n/usr/local/bin/python3-config\n/usr/local/bin/python3.7\n/usr/local/bin/python3.7-config\n/usr/local/bin/python3.7m\n/usr/local/bin/python3.7m-config\n/usr/local/bin/pyvenv\n/usr/local/bin/pyvenv-3.7\n/usr/local/bin/wheel3\n/usr/local/share/man/man1/python3.1\n/usr/local/share/man/man1/python3.7.1\n/usr/local/lib/pkgconfig/python-3.7.pc\n/usr/local/lib/pkgconfig/python-3.7m.pc\n/usr/local/lib/pkgconfig/python3.pc\n/usr/local/Frameworks/Python.framework/Headers\n/usr/local/Frameworks/Python.framework/Python\n/usr/local/Frameworks/Python.framework/Resources\n/usr/local/Frameworks/Python.framework/Versions/3.7\n/usr/local/Frameworks/Python.framework/Versions/Current\n
Run Code Online (Sandbox Code Playgroud)\n

因此,为了回答你的问题,在 python@3.7 和 python@3.9 之间切换的一种方法是使用brew linkand brew unlink,是的,如果你有与 python@3.7 兼容而不与 python@3.9 兼容的脚本,这可能会破坏事情,反之亦然。

\n

还有另一种方法可以同时使用不同版本的Python。这在输出的末尾进行了解释brew link --dry-run python@3.7

\n
If you need to have this software first in your PATH instead consider running:\n  echo \'export PATH="/usr/local/opt/python@3.7/bin:$PATH"\' >> ~/.zshrc\n
Run Code Online (Sandbox Code Playgroud)\n

对于需要python@3.7的脚本,可以设置:

\n
 export PATH="/usr/local/opt/python@3.7/bin\n
Run Code Online (Sandbox Code Playgroud)\n

对于需要 python@3.9 的脚本,您可以设置:

\n
 export PATH="/usr/local/opt/python@3.9/bin\n
Run Code Online (Sandbox Code Playgroud)\n

希望这可以帮助。

\n