防止 Homebrew 破坏 pyenv 安装

防止 Homebrew 破坏 pyenv 安装

可以使用pyenv安装和切换多个 Python 版本,这在尝试开发和测试针对非最新版本的 Python 版本的软件时非常有用。这些 Python 安装的依赖项之一是 readline,它由 brew 安装。

我发现的问题是 brew 会定期自行安装新版本的 readline。尽管系统上可能存在多个版本的 readline,但只有其中一个在 /usr/local/opt/readline 上建立了符号链接。

如果 brew 升级到 readline 的新版本,Python 会突然开始吐出文本,就像^[[A尝试使用光标键进行行编辑时一样。如果您随后尝试明确操作,import readline则会看到如下错误:

>>> import readline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/********/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/readline.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
  Referenced from: /Users/********/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/readline.cpython-37m-darwin.so
  Reason: image not found

它正在寻找/usr/local/opt/readline/lib/libreadline.7.dylib。问题似乎是在pyenv install构建 Python 时,有一个包含 的/usr/local/opt/readline符号链接。该文件仍然存在!但它在此路径上不再可用,因为 brew 已将符号链接更新为指向版本 8。/usr/local/Cellar/readline/7.0.5lib/libreadline.7.dylib

我可以brew switch readline 7.0.5再次交换这些,然后 pyenv 的 Python 就可以再次工作了。但是现在Homebrew 的Python 也存在类似的问题。有什么合理的方法可以让它们共存吗?不会再次自发破裂下次 Homebrew 安装新版本的 readline 时?

答案1

我在文件夹中找不到 readline 7 /usr/local/opt/readline/lib/,但我只找到了libreadline.8.0.dylib。我用这个解决方案解决了这个问题。

https://superuser.com/a/1411220

基本上,您只需要创建一个软链接:

sudo ln -s libreadline.8.0.dylib libreadline.7.dylib

相关内容