python pip安装psycopg2安装错误

jer*_*use 22 python postgresql pip

我做了一个简单pip install psycopg2的mac系统.它安装正常,但当我尝试使用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
Run Code Online (Sandbox Code Playgroud)

pip freeze显示psycopg2==2.4.5恰到好处.我已经在几个virtualenvs上安装了psycopg2,但这是我第一次看到这样的错误.我尝试卸载并重新安装,结果相同.请帮忙

Pur*_*ell 53

这里接受的答案是正确的(除了我认为它必须是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,找到lib目录/Applications/Postgres.app/Contents/MacOS/lib,
  • 在某处酿造/usr/local/Cellar,
  • 在*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
Run Code Online (Sandbox Code Playgroud)

然后更新(或创建)此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
Run Code Online (Sandbox Code Playgroud)

应该是固定的.非常肯定ln -fs比删除符号链接并重新编写它更好,因此libssl在不存在时需要它的东西不太可能不可用(它做同样的事情;它首先删除符号链接,如果它是已经在那里,比你输入它的速度快.总是警惕在/ usr/lib上搞乱.


小智 41

为我工作:

env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2
Run Code Online (Sandbox Code Playgroud)

来源:无法在 Mac OS X 10.7 上的 virtualenv 中使用 pip 安装 psycopg2


Tim*_*ber 24

升级到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
Run Code Online (Sandbox Code Playgroud)

如果libssl.dylib没有链接到错误版本提到的版本,请确保您有一个版本的库,并确保/usr/lib/libssl.dylib指向它,而不是旧版本.

如果该链接不存在,请像这样创建它

sudo ln -s library_to_link_to link_to_create
Run Code Online (Sandbox Code Playgroud)

当然,使用适合您机器的位置.对我来说,结果是:

sudo ln -s /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
Run Code Online (Sandbox Code Playgroud)

编辑:

似乎有些人在解决我的部分问题时遇到了麻烦.即,删除这些重要的库甚至会暂时导致操作系统出现问题.

Per Purrell的答案是,确保-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
Run Code Online (Sandbox Code Playgroud)