我做的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但是这是我第一次看到这样的错误。我试图卸载并重新安装,相同的结果。请帮忙
我遇到了类似的问题,升级到山狮后。
相反,每斯莱克的建议文件的复制的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
这里的接受的答案是正确的(除非我想那一定是LN -fs,其实我觉得它甚至可能冒险destabalizing您的操作系统如果没有(?))。碰撞到这一点,并处理它后,我只是想收集这一问题和其他问题LIB(libcrypto.1.0.0.dylib),你会在山狮和Snow Leopard碰上Postgres的9 *的完整的解决方案,并也许还有其他的系统。这也阻止了我从运行PSQL,其抱怨相同的两个库。
本质上说是/usr/lib
,和的libssl需要libcrypto两年后的版本库。您可以在Postgres的lib目录,这些库的需要的版本。
/Library/PostgreSQL/9.2/lib
。/Applications/Postgres.app/Contents/MacOS/lib
,首先复制最新从Postgres的lib目录中这两个库来/usr/local/Cellar
:
/usr/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
:
ln -fs
应该是固定的。很肯定LN -fs是不是删除符号链接和改造它更好的,所以是东西,需要它,因为这是不存在的时间的libssl是unfindable的机会较少(它做同样的事情,它首先删除符号链接,如果是已经存在,只是速度比你可以键入它)。始终警惕放在/ usr / lib目录乱搞的。
在OSX 10.11,埃尔卡皮坦,以替代符号链接的解决方案报告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
。为我工作的解决方案是使用BREW和设置DYLD_LIBRARY_PATH。所以:
Operation not permitted
寻找到的OpenSSL库冲泡位于(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
- 检查DYLD_FALLBACK_LIBRARY_PATH
重新启动外壳,或者只是qazxsw POI,安装psycopg2:
this
如果它的工作原理测试:
source ~/.bash_profile
当试图做一个执行syncdb的Postgres 9.1和/psycopg2/_psycopg.so增加了进一步的错误:
库未加载:/usr/lib/libpq.5.dylib原因:不兼容的库版本:@loader_path /../ LIB / libcrypto.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
于:LOCAL:/ usr / lib目录
这是在Mac OSX上10.8.1在一个virtualenv中(1.8.2)和pgAdmin的(1.14.3)网络。里面的virtualenv是:
Django的1.4 ==
psycopg2 == 2.4.5
...等等...现在恢复正常。
对我来说,libcrypto一个的libssl版本1.0.0低于所在:
pip uninstall psycopg2
pip install psycopg2
以便解决我的问题的命令是:
$ python -c"import psycopg2 ; print('psycopg2 is now ok')"
我的朋友,只是和PostgreSQL lib目录复制的libssl。*文件到/ usr / lib和在这种情况下,所有的事情将是完美的重新启动您的应用程序^ _ ^
对于我的小牛,它的工作只是复制两个dylib和重新启动的Python:
/Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib
/Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib
如果你感到不舒服复制库到系统目录下,你可以使用DYLD_LIBRARY_PATH环境变量来强制操作系统寻找Postgres的图书馆目录的libssl。例如。:
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
(该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/
手册页记录下)。