【问题标题】:Do you need to run brew unlink / brew link before / after brew switch?您需要在 brew 切换之前/之后运行 brew unlink / brew link 吗?
【发布时间】:2021-02-26 04:52:46
【问题描述】:

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

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

看起来我安装了一些“系统”python(它安装在/usr/bin/python3 下),没有用 brew 安装,如果我安装 brew unlink python@3.9brew unlink python@3.7,我可以看到它:

python -V
Python 3.7.3

/usr/bin/python3 -V
Python 3.7.3

which python3
/usr/bin/python3

然后我切换到python@3.9:

brew switch python@3.9 3.9.0_1
python -V
Python 3.9.0

然后我切换到python@3.7:

brew switch python@3.7 3.7.9
python -V
Python 3.9.0

但它仍然显示 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

似乎出于某种原因,它会在 brew 开关上自动链接 python@3.9,而不是为 python@3.7 这样做,为什么? brew switch 里面有 brew unlink / brew 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)

所以现在应该是这样的:

brew unlink python@3.7 && brew unlink python@3.9
brew link python@3.7
python -V
Python 3.7.9

【问题讨论】:

    标签: python-3.x macos homebrew


    【解决方案1】:

    brew switch 不再是 brew 命令。

    $ brew --version                                                                    
    Homebrew 3.0.0
    Homebrew/homebrew-core (git revision 8d644; last commit 2021-02-10)
    
    $ brew switch mariadb@10.3                                                  
    Error: Unknown command: switch
    

    您在问题中提到的Tips and Tricks 页面也删除了对brew switch 的任何提及。

    安装以前版本的公式

    安装某些公式的特定版本的支持方法 是查看是否有可用的版本化公式(例如 gcc@7)。如果 您要查找的版本不可用,请考虑使用 brew 提取。

    要么,man brew 中没有提到 brew switch

    因此,Homebrew 维护人员似乎已在上游解决了您的问题。

    请注意,brew switchHomebrew 2.6.0 以来已被弃用。

    == 更新 ==

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

    python@3.7 is keg-only, which means it was not symlinked into /usr/local,
    because this is an alternate version of another formula.
    

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

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

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

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

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

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

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

    If you need to have this software first in your PATH instead consider running:
      echo 'export PATH="/usr/local/opt/python@3.7/bin:$PATH"' >> ~/.zshrc
    

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

     export PATH="/usr/local/opt/python@3.7/bin
    

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

     export PATH="/usr/local/opt/python@3.9/bin
    

    希望这会有所帮助。

    【讨论】:

    • 那么现在哪种方式是在 python 版本之间“切换”的正确方式?如果我这样做 unlink / link 会破坏事情吗?即如果我“切换”到python@3.7,但其他一些公式“取决于”python@3.9
    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多