【问题标题】:Mac psql/readline - Library not loadedMac psql/readline - 未加载库
【发布时间】:2017-02-20 23:57:26
【问题描述】:

我正在使用 Mac,Sierra 10.12.3,我正在尝试通过 psql 命令访问 PostgreSQL 数据库,但它引发了错误

dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
Referenced from: /usr/local/bin/psql
Reason: image not found
Abort trap: 6

一两天前,我和某人一起工作,我需要安装 pip,所以我运行了brew install pip,一切都很好。这是我从那时起第一次尝试运行psql,我不确定这与我的问题有什么关系,但似乎很有可能,因为我没有进行任何其他更改。

现在我做了一点侦探工作,发现如果我去/usr/local/opt/ 确实有一个readline 别名目录指向/usr/local/Cellar/readline/7.0.1(7.0.1 版似乎也已经安装在某个时候-也许作为 pip 的一部分?也许我做错了......)所以应该抛出原始错误是有道理的。我把别名改成指向/usr/local/Cellar/readline/6.3.8,错误略有变化:

dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
Referenced from: /usr/local/bin/psql
Reason: no suitable image found.  Did find:
/usr/local/opt/readline/lib/libreadline.6.dylib: stat() failed with errno=20
Abort trap: 6

所以我似乎在某处,但仍然有问题。如果有人能阐明解决方案,我将永远感激不尽。

【问题讨论】:

标签: python postgresql command-line


【解决方案1】:

Readline 已升级,但您仍在使用来自 postgres 的旧 psql。将 postgres 升级到使用当前 readline 的当前版本为我解决了这个问题:

brew upgrade postgres

【讨论】:

  • 这对我有用,似乎比通过符号链接欺骗它使用更新版本 +1 更好的解决方案
  • 在现实场景中,postgres 升级可能会导致比试图解决的问题更多的问题。建议仅在发出声音警告的情况下这样做
  • 这对我有用。切换 readline 6.3.8 没有。 brew switch readline 6.3.8Error: readline does not have a version "6.3.8" in the Cellar.readline installed versions: 8.0.1
  • 您无法切换到尚未安装的版本。
  • 可以,但是比较乱。您必须取消链接,在 Homebrew 的 repo 中找到公式以及您想要恢复的确切提交。类似于他们在这里为另一个公式所做的:github.com/helm/helm/issues/4547#issuecomment-423312200
【解决方案2】:

我只需运行brew switch readline 6.3.8就可以解决这个问题

【讨论】:

  • 我在不同的上下文中遇到了同样的错误,尝试通过subprocess.Popen() 运行bash 命令,brew switch readline 6.3.8 也适用于此。
  • 太棒了!很高兴这有帮助 - 我真的很沮丧。
  • 最近更新的 hombrew 说:Error: readline does not have a version "6.3.8" in the Cellar. Versions available: 7.0.1, 7.0.3, 7.0.3_1叹息
  • 我不知道这是否是个好主意,但我能够让 psql 使用符号链接:ln -s /usr/local/opt/readline/lib/libreadline.7.dylib /usr/local/opt/readline/lib/libreadline.6.dylib
  • 这个修复帮助了我,谢谢!但是我们需要注意,之前注册的 brew readline 版本(在我的例子中是 7.0.5)之前由于某些原因被安装了。切换后,一些需要以前安装的版本(在我的情况下为 7.0.5)的程序/库可能会开始抱怨并停止工作。如果是这种情况,我建议像@dbenton 建议的那样进行修复 - 注册两个 readline 版本。
【解决方案3】:

在我运行brew upgrade之后,我也遇到了这个问题。

首先,您需要在 Mac 上确认readline 的版本。

在您的情况下,您的旧 readline 版本是 6.x。升级后,您的 readline 已更新为 7.0.1。因此,您需要链接新的 readline。

这些代码可能会有所帮助。

$ cd /usr/local/opt/readline/lib/  # cd to readline library
$ sudo ln -s libreadline.7.dylib libreadline.6.dylib  # change the link

我觉得更好的办法是改系统readline链接,但是不知道怎么改。

【讨论】:

  • 改天,另一个版本。为了让它工作,我不得不ln -s libreadline.7.dylib libreadline.8.0.dylib 这看起来非常h​​acky。最令人惊讶的是它确实有效。
  • @dland 感谢这个 hacky 修复。为我工作。不过,我不得不更改链接参数:ln -s libreadline.8.0.dylib libreadline.7.dylib.
  • 如果你有版本 8 到 8.8 ls -s libreadline.8.dylib libreadline.8.1.dylib
猜你喜欢
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2011-02-27
  • 1970-01-01
  • 2021-07-21
  • 2017-09-03
相关资源
最近更新 更多