python pip安装psycopg2安装错误

时间:2012-07-18 09:27:05

标签: python postgresql pip

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

10 个答案:

答案 0 :(得分:51)

这里接受的答案是正确的(除了我认为它必须是ln -fs,事实上我认为如果不是(?),它甚至可能会使你的操作系统失去稳定性)。碰到这个并处理它之后我只想收集这个问题的完整解决方案以及你将在Mountain Lion和Snow Leopard上遇到Postgres 9. *的其他lib问题(libcrypto.1.0.0.dylib),以及也许其他系统。这也阻止了我运行psql,它抱怨了相同的两个库。

本质上,/usr/lib,libssl和libcrypto中需要两个更高版本的库。您可以在Postgres lib目录中找到这些库的所需版本。

  • 如果您是OSX并安装了Postgres的企业数据库版本,则该版本将位于/Library/PostgreSQL/9.2/lib
  • 对于其他安装类型的Postgres,查找Postgress安装目录中的lib目录,例如,对于Postgress.app,找到/Applications/Postgres.app/Contents/MacOS/lib中的lib目录,
  • 适用于/usr/local/Cellar
  • 中的某处
  • on * nix,无论您的安装位于何处。但是,如果你的发行版只是通过包管理器发布了更高版本,请先查看* nix。

首先将这两个库中的最新版本从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

来源:https://code-examples.net/en/q/93ae48

答案 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):

  • 使用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 - 检查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。 因此,他们一起以某种方式修复了这种情况。