蟒蛇PIP安装psycopg2安装错误

问题描述 投票:20回答:8

我做的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但是这是我第一次看到这样的错误。我试图卸载并重新安装,相同的结果。请帮忙

python postgresql pip
8个回答
23
投票

我遇到了类似的问题,升级到山狮后。

相反,每斯莱克的建议文件的复制的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

52
投票

这里的接受的答案是正确的(除非我想那一定是LN -fs,其实我觉得它甚至可能冒险destabalizing您的操作系统如果没有(?))。碰撞到这一点,并处理它后,我只是想收集这一问题和其他问题LIB(libcrypto.1.0.0.dylib),你会在山狮和Snow Leopard碰上Postgres的9 *的完整的解决方案,并也许还有其他的系统。这也阻止了我从运行PSQL,其抱怨相同的两个库。

本质上说是/usr/lib,和的libssl需要libcrypto两年后的版本库。您可以在Postgres的lib目录,这些库的需要的版本。

  • 如果你是OSX和安装的Postgres数据库企业版,这将是在/Library/PostgreSQL/9.2/lib
  • 对于其他类型的安装的Postgres的,找里面的Postgress安装目录,例如,对于Postgres.app lib目录,找到lib目录中qazxsw POI,
  • 用于酿造某处/Applications/Postgres.app/Contents/MacOS/lib
  • 在* nix,无论您安装的。但是第一次看到在* nix如果你的发行版只是通过软件包管理器具有更高版本。

首先复制最新从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目录乱搞的。


3
投票

在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):

  • 使用BREW找到OpenSSL的位置(一张纸条,BREW会很慢):# 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

2
投票

当试图做一个执行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

...等等...现在恢复正常。


2
投票

对我来说,libcrypto一个的libssl版本1.0.0低于所在:

pip uninstall psycopg2
pip install psycopg2

以便解决我的问题的命令是:

$ python -c"import psycopg2  ;   print('psycopg2 is now ok')"

1
投票

我的朋友,只是和PostgreSQL lib目录复制的libssl。*文件到/ usr / lib和在这种情况下,所有的事情将是完美的重新启动您的应用程序^ _ ^


0
投票

对于我的小牛,它的工作只是复制两个dylib和重新启动的Python:

/Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib
/Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib

0
投票

如果你感到不舒服复制库到系统目录下,你可以使用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/ 手册页记录下)。

© www.soinside.com 2019 - 2024. All rights reserved.