无法为PostgreSQL加载Python绑定 - psycopg2

时间:2014-09-28 19:09:44

标签: python macos postgresql trac

从Lion Mountain升级到Mavericks(10.9.4)后,Trac安装停止了工作。

首先,我尝试通过升级Trac安装来解决它,但是我收到以下错误消息:

$ trac-admin /Users/myuser/Documents/2014/trac upgrade
Error: Cannot load Python bindings for PostgreSQL

然后,通过直接在Python控制台上进行测试,我可以说这是一致的,因为我得到了一个等效的错误:

 $ python
 Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
 [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
 Type "help", "copyright", "credits" or "license" for more information.
 >>> import psycopg2
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/Library/Python/2.7/site-packages/psycopg2/__init__.py", line 50, in <module>
     from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
 ImportError: dlopen(/Library/Python/2.7/site-packages/psycopg2/_psycopg.so, 2)
 Library not loaded: libssl.1.0.0.dylib
   Referenced from: /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
   Reason: image not found
 >>> 

我已经尝试了多种方法:安装和卸载psycopg2(使用pip和easy_install),甚至从源代码构建psycopg2

然后,在寻找解决方案时,我在这些相关问题Q1Q2Q3中找到了一些建议,但尚未成功。

otool,正在给我以下输出:

$ otool -L /Library/Python/2.7/site-packages/psycopg2/_psycopg.so

/Library/Python/2.7/site-packages/psycopg2/_psycopg.so:
     libpq.5.dylib (compatibility version 5.0.0, current version 5.5.0)
     libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
     libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
     /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

然后,我试过设置DYLD_FALLBACK_LIBRARY_PATH环境变量,如下所示:

 $ echo $DYLD_FALLBACK_LIBRARY_PATH
 /Users/myuser/lib:/usr/local/lib:/lib:/usr/lib

包括,重新启动控制台并重启机器,我的解决方案用完了,不知道我该如何解决?

3 个答案:

答案 0 :(得分:1)

最后,我能够运行Trac访问存储在PostgreSQL 9.2中的旧票据数据库

......经过几年的尝试,以及从小牛到优胜美地再到El Capitan的几次升级,这就是解决方案:

第1步:更改/ usr / local文件夹的所有者

sudo chown -R $(whoami):admin /usr/local

第2步:更新路径

PG_HOME=/Library/PostgreSQL/9.2
PATH=$PATH:$PG_HOME/bin

第3步:重新安装psycopg2

pip uninstall psycopg2
pip install psycopg2

步骤4:更新psycopg2使用的相对路径

sudo install_name_tool -change libpq.5.dylib /Library/PostgreSQL/9.2/lib/libpq.5.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libcrypto.1.0.0.dylib /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libssl.1.0.0.dylib /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so

答案 1 :(得分:1)

@Emerson应该对这个解决方案充分肯定,但是,这里有一个脚本,它只修复_psycopg.so中的OpenSSL链接,无论你的系统如何配置。我已经进行了几个小时的循环试图解决这个问题无济于事,他的答案最终解决了。

这最终对我有用,可以修改成一个有点通用的解决方案:

#!/bin/bash
echo Fixing psycopg2 links in Mac OS X ...
site_packages="$(pip show psycopg2 | grep Location | awk '{ print $2 }')"
openssl_lib="$(brew --prefix openssl)/lib"
sudo install_name_tool -change libcrypto.1.0.0.dylib "$openssl_lib/libcrypto.1.0.0.dylib" "$site_packages/psycopg2/_psycopg.so"
sudo install_name_tool -change libssl.1.0.0.dylib "$openssl_lib/libssl.1.0.0.dylib" "$site_packages/psycopg2/_psycopg.so"

它基本上是@Emerson的解决方案,但路径由您的设置和brew的安装位置动态决定。您需要安装psycopg2以及pipbrew

答案 2 :(得分:0)

我遇到了完全相同的问题,并按照下面提到的步骤解决了这个问题:

<强> STEP-1:

通过在命令行上编写openssl来检查是否安装了openssl:

>>openssl

如果它启动,这意味着它已安装在您的系统中,您可以跳过STEP-2直接进入STEP-3。

<强> STEP-2:

如果未安装openssl,请按以下方式安装:

brew install openssl

<强> STEP-3:

检查计算机上openssl lib的路径。在我的机器上它是:

/usr/local/opt/openssl/lib/

<强> STEP-4:

您必须通过运行以下命令从STEP-3中简单地包含此路径:

export DYLD_LIBRARY_PATH=***YOUR OPENSSL PATH FROM STEP-3 HERE***

即在我的情况下,带有STEP-3路径的命令是:

export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib/

现在运行python并导入psycopg2。遵循这个食谱后我没有错误。