[英]python pip install psycopg2 install error
我在 mac 系统上做了一个简单的pip install psycopg2
。 它安装正常,但是当我尝试使用 psycopg2 时出现错误:
Reason: Incompatible library version: _psycopg.so requires version 1.0.0 or later, but libssl.0.9.8.dylib provides version 0.9.8
pip freeze
显示psycopg2==2.4.5
恰到好处。 我已经在几个 virtualenvs 上安装了 psycopg2,但这是我第一次看到这样的错误。 我尝试卸载并重新安装,结果相同。 请帮忙
这里接受的答案是正确的(除了我认为它必须是 ln -fs,事实上我认为如果不是(?),它甚至可能会破坏你的操作系统)。 在遇到这个问题并处理它之后,我只想收集这个问题的完整解决方案和其他 lib 问题(libcrypto.1.0.0.dylib),您将在 Mountain Lion 和 Snow Leopard 上遇到 Postgres 9.*,并且也许其他系统。 这也阻止了我运行 psql,它抱怨相同的两个库。
基本上/usr/lib
中需要两个更高版本的库,即 libssl 和 libcrypto。 您可以在 Postgres lib 目录中找到这些库的所需版本。
/Library/PostgreSQL/9.2/lib
中。/Applications/Postgres.app/Contents/MacOS/lib
中查找 lib 目录,/usr/local/Cellar
某处的 brew, 首先将这两个库中最新的从 Postgres lib 目录复制到/usr/lib
:
sudo cp /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/lib
sudo cp /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/lib
然后更新(或创建)这个库的 /usr/lib 符号链接。 无论哪种方式,命令都是ln -fs
:
sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib
应该是固定的。 很确定 ln -fs 比删除符号链接并重新制作它更好,因此 libssl 在它不存在时被需要它的东西找不到的可能性较小(它做同样的事情;它首先删除符号链接,如果它是已经在那里,只是比你输入它的速度快)。 始终警惕在 /usr/lib 上乱搞。
为我工作:
env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2
升级到 Mountain Lion 后,我遇到了类似的问题。
不要按照 Slack 的建议复制 libssl.* 文件,而是确保/usr/lib/libssl.dylib
实际上是指向最新版本库的软链接。
例如,在我的机器上, ls -l /usr/lib/libssl*
给出:
lrwxr-xr-x 1 root wheel 46B Jun 27 15:24 /usr/lib/libssl.1.0.0.dylib -> /Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib
lrwxr-xr-x 1 root wheel 27B Jul 30 10:31 /usr/lib/libssl.dylib -> /usr/lib/libssl.1.0.0.dylib
如果libssl.dylib
没有链接到错误版本提到的版本,请确保您拥有该版本的库,然后确保/usr/lib/libssl.dylib
指向它,而不是旧版本。
如果链接不存在,请像这样创建它
sudo ln -s library_to_link_to link_to_create
当然,使用适合您机器的正确位置。 对我来说,结果是:
sudo ln -s /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
编辑:
似乎有些人在使用我的部分解决方案时遇到了麻烦。 也就是说,即使是暂时删除这些重要的库也会导致操作系统出现问题。
根据Purrell 的回答,确保在使用ln
命令时包含-fs
标志,这有助于确保库不会在短时间内丢失。 例如,
sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib
在 OSX 10.11 上,El Capitan,替换符号链接的解决方案报告Operation not permitted
。 对我有用的解决方案是使用 brew 并设置 DYLD_LIBRARY_PATH。 所以:
brew install openssl
找到 openssl brew 库所在的位置( brew --prefix openssl
可以提供帮助),从目录/usr/local/Cellar/openssl
开始搜索。 在我的例子中,它在/usr/local/Cellar/openssl/1.0.2d_1/lib
最后设置DYLD_LIBRARY_PATH,即在.bash_profile中加入这样一行:
# replace location of lib files with folder name you found in previous step
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/Cellar/openssl/1.0.2d_1/lib
更新:更通用/更好的选择是(感谢@dfrankow):
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$(brew --prefix openssl)/lib
DYLD_FALLBACK_LIBRARY_PATH
- 检查这个重新启动 shell,或者只是source ~/.bash_profile
,重新安装 psycopg2:
pip uninstall psycopg2
pip install psycopg2
并测试它是否有效:
$ python -c"import psycopg2 ; print('psycopg2 is now ok')"
当尝试执行 syncdb Postgres 9.1 和 /psycopg2/_psycopg.so 添加了一个进一步的错误:
库未加载:@loader_path/../lib/libcrypto.dylib 引用自:/usr/lib/libpq.5.dylib 原因:库版本不兼容:libpq.5.dylib 需要 1.0.0 或更高版本,但 libcrypto. 0.9.8.dylib 提供0.9.8版本
通过从以下位置复制这六 (6) 个文件来解决:
本地:/图书馆/PostgreSQL/9.1/lib/
libssl.1.0.0.dylib
libssl.a
libssl.dylib
libcrypto.1.0.0.dylib
libcrypto.a
libcrypto.dylib
到:本地:/usr/lib
这是在 Mac OSx 10.8.1 上,在 virtualenv (1.8.2) 和 pgAdmin (1.14.3) 中有一个 web。 virtualenv 内部是:
Django==1.4
psycopg2==2.4.5
...等...现在恢复正常。
对我来说,libcryto 和 libss 版本 1.0.0 位于以下位置:
/Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib
/Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib
所以解决我的问题的命令是:
sudo ln -fs /Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib
我的朋友,只需将 libssl.* 文件从 PostgreSQL lib 目录复制到 /usr/lib 并重新启动您的应用程序,在这种情况下一切都会完美 ^_^
对于我在 Mavericks 上,只需复制两个 dylib 并重新启动 Python 就可以了:
cp /Library/PostgreSQL/9.3/lib/libssl.1.0.0.dylib /usr/lib/
cp /Library/PostgreSQL/9.3/lib/libcrypto.1.0.0.dylib /usr/lib/
如果您不愿意将库复制到系统目录中,可以使用 DYLD_LIBRARY_PATH 环境变量强制操作系统在 Postgres 的库目录中搜索 libssl。 例如:
$ DYLD_LIBRARY_PATH=/Library/PostgreSQL/9.4/lib pip install psycopg2
(记录在dyld
手册页下)。
我在我的 Mac OS High Sierra 上遇到了类似的问题。
导入错误:dlopen(/Users/chicha/Projects/CTMR/sample_registration/romans_env/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so,2):未加载库:/opt/local /lib/libssl.1.0.0.dylib
但是在“pip install postgres”之后它工作正常。 根据 pip show - “postgres 是对 psycopg2 的高价值抽象”。 安装时还安装了 psycopg2-binary 和 psycopg2-pool。 所以,他们一起以某种方式修复了这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.