python pip安装psycopg2安装错误

python pip安装psycopg2安装错误,python,postgresql,pip,Python,Postgresql,Pip,我在mac系统上做了一个简单的pip安装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恰到好处。我已经在几个VirtualNV上安装了psycop

我在mac系统上做了一个简单的
pip安装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
恰到好处。我已经在几个VirtualNV上安装了psycopg2,但这是我第一次看到这样的错误。我尝试卸载和重新安装,结果相同。请帮助我的朋友,只需将libssl.*文件从PostgreSQL lib目录复制到/usr/lib并重新启动您的应用程序,在这种情况下,一切都会很完美^ ^

升级到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
编辑

似乎有些人对我的部分解决方案有问题。也就是说,删除这些重要的库甚至会暂时导致操作系统出现问题

根据,确保在使用
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

尝试执行syncdb Postgres 9.1和/psycopg2/_psycopg.so时,添加了另一个错误:

未加载库:@loader\u path/。/lib/libcrypto.dylib 引用自:/usr/lib/libpq.5.dylib 原因:库版本不兼容:libpq.5.dylib需要1.0.0或更高版本,但libcrypto.0.9.8.dylib提供0.9.8版本

通过复制以下六(6)个文件解决:

本地:/Library/PostgreSQL/9.1/lib/

libssl.1.0.0.dylib

libssl.a

libssl.dylib

libcrypto.1.0.0.dylib

libcrypto.a

libcrypto.dylib

至:本地:/usr/lib

这是在MacOSX10.8.1上,在virtualenv(1.8.2)和pgAdmin(1.14.3)中有一个web。virtualenv内部是:

Django==1.4

psycopg2==2.4.5


。。。等现在恢复正常

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

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

  • 如果您是OSX并且安装了Postgres的企业数据库版本,那么这将在
    /Library/PostgreSQL/9.2/lib
  • 对于其他安装类型的Postgres,请在Postgress安装目录中查找lib目录,例如,对于Postgress.app,请在
    /Applications/Postgres.app/Contents/MacOS/lib
    中查找lib目录
  • 对于
    /usr/local/ceral
    中的brew
  • 在*nix上,无论安装在何处。但是,如果您的发行版仅通过包管理器具有更高版本,请先查看*nix
首先将这两个lib中最新的一个从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上乱搞。

对于我来说,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

对我来说,在Mavericks上,只需复制两个动态库并重新启动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
手册页下)。

在El Capitan的OSX 10.11上,报告了更换符号链接的解决方案
不允许操作
。对我有效的解决方案是使用brew并设置DYLD_库路径。因此:

brew install openssl
查找openssl brew LIB的位置(
brew——前缀openssl
可以帮助),从目录
/usr/local/cillar/openssl
开始搜索。在我的例子中,它位于
/usr/local/ceral/openssl/1.0.2d_1/lib

最后设置DYLD_LIBRARY_PATH,即在.bash_配置文件中添加如下行:

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

  • 要使用brew查找openssl位置(注意,brew可能很慢):
    DYLD\u LIBRARY\u PATH=$DYLD\u LIBRARY\u PATH:$(brew--前缀openssl)/lib
  • 出于开发目的,最好使用
    DYLD\u FALLBACK\u LIBRARY\u PATH
    来代替-检查
重新启动shell,或者只需
source~/.bash_profile
,重新安装psycopg2:

pip uninstall psycopg2
pip install psycopg2
并测试其是否有效:

$ python -c"import psycopg2  ;   print('psycopg2 is now ok')"
为我工作:

env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2

来源:

我的Mac OS High Sierra也有类似问题

ImportError:dlopen(/Users/chicha/Projects/CTMR/sample_registration/romans_env/lib/python3.7/site-packages/psycopg2//psycopg.cpython-37m-darwin.so,2):库不是