我在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,但这是我第一次看到这样的错误。我尝试卸载并重新安装,结果相同。请帮忙
答案 0 :(得分:51)
这里接受的答案是正确的(除了我认为它必须是ln -fs,事实上我认为如果不是(?),它甚至可能会使你的操作系统失去稳定性)。碰到这个并处理它之后我只想收集这个问题的完整解决方案以及你将在Mountain Lion和Snow Leopard上遇到Postgres 9. *的其他lib问题(libcrypto.1.0.0.dylib),以及也许其他系统。这也阻止了我运行psql,它抱怨了相同的两个库。
本质上,/usr/lib
,libssl和libcrypto中需要两个更高版本的库。您可以在Postgres lib目录中找到这些库的所需版本。
/Library/PostgreSQL/9.2/lib
。/Applications/Postgres.app/Contents/MacOS/lib
中的lib目录,/usr/local/Cellar
,首先将这两个库中的最新版本从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
然后更新(或创建)此libs的/ 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上搞乱。
答案 1 :(得分:23)
升级到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's answer,确保在使用-fs
命令时包含ln
标志,这有助于确保库在短时间内不会丢失。如,
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
答案 2 :(得分:8)
为我工作:
env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2
答案 3 :(得分:3)
在OSX 10.11上,El Capitan,替换符号链接的解决方案报告了<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div id="grad"></div>
</body>
</html>
。对我有用的解决方案是使用brew并设置DYLD_LIBRARY_PATH。所以:
Operation not permitted
找到openssl brew lib所在的位置(brew install openssl
可以提供帮助),从目录brew --prefix openssl
开始搜索。就我而言,它位于/usr/local/Cellar/openssl
最后设置DYLD_LIBRARY_PATH,即将这样的行添加到.bash_profile中:
/usr/local/Cellar/openssl/1.0.2d_1/lib
更新:更多通用/更好的替代方案(感谢@dfrankow):
# 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
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$(brew --prefix openssl)/lib
- 检查this 重新启动shell,或只是DYLD_FALLBACK_LIBRARY_PATH
,重新安装psycopg2:
source ~/.bash_profile
并测试它是否有效:
pip uninstall psycopg2
pip install psycopg2
答案 4 :(得分:2)
当尝试执行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)个文件解决:
LOCAL:/Library/PostgreSQL/9.1/lib /
libssl.1.0.0.dylib
libssl.a
libssl.dylib
libcrypto.1.0.0.dylib
libcrypto.a
libcrypto.dylib
to:LOCAL:/ usr / lib
这是在Mac OSx 10.8.1上使用virtualenv(1.8.2)和pgAdmin(1.14.3)中的web。 virtualenv内部是:
的Django == 1.4
psycopg2 == 2.4.5
......等......现在恢复正常。
答案 5 :(得分:2)
对我来说,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
答案 6 :(得分:1)
我的朋友,只需将libgrel。*文件从PostgreSQL lib目录复制到/ usr / lib并在这种情况下重新启动你的应用程序所有的东西都将是完美的^ _ ^
答案 7 :(得分:0)
对于我在小牛队,它只是复制两个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/
答案 8 :(得分:0)
如果您不方便将库复制到系统目录中,可以使用DYLD_LIBRARY_PATH环境变量强制操作系统在Postgres的库目录中搜索libssl。 E.g:
$ DYLD_LIBRARY_PATH=/Library/PostgreSQL/9.4/lib pip install psycopg2
(在dyld
手册页下记录)。
答案 9 :(得分:0)
我在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显示-“ postgres是对psycopg2的高价值抽象”。 在安装时,还安装了psycopg2-binary和psycopg2-pool。 因此,他们一起以某种方式修复了这种情况。