从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
。
然后,在寻找解决方案时,我在这些相关问题Q1,Q2和Q3中找到了一些建议,但尚未成功。
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
包括,重新启动控制台并重启机器,我的解决方案用完了,不知道我该如何解决?
答案 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
以及pip
和brew
。
答案 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。遵循这个食谱后我没有错误。