【发布时间】:2013-08-02 19:55:53
【问题描述】:
我弄清楚了当前许多 osx 安装的根本问题是什么(例如 http://psycopg.lighthouseapp.com/projects/62710/tickets/111-library-not-loaded-libssl100dylib 和 python pip install psycopg2 install error)
很多人使用 EnterpriseDB 的 PostgreSQL 安装程序;可能是因为它是http://www.postgresql.org/download/macosx/ 中的第一个选项
如果您使用它进行安装,它会将所有需要的二进制文件和库安装到它的私有版本化空间中...
即
/Library/PostgreSQL/9.2/bin
/Library/PostgreSQL/9.2/lib
/Library/PostgreSQL/8.4.5/bin
/Library/PostgreSQL/8.4.5/lib
如果我运行 pg_config(它指向 /Library/PostgreSQL/v/bin/pg_config ),它会提供正确的信息
LIBDIR = /Library/PostgreSQL/9.2/lib
但是,导入 psycopg2 的所有错误似乎都表明 psycopg2 正在尝试从 /usr/local/lib 加载,而不是它编译时针对(或应该预期的)的 lib
我尝试使用环境变量( LD_LIBRARY_PATH , LD_PRELOAD ),但似乎无法完成这项工作。除非(正确的)文件是 /usr/local/lib ,否则 psycopg2 不想导入。
我不喜欢其他人在这里提到的重写或链接这些文件的解决方案;必须有一种方法可以强制 Python / psycopg2 使用预期的文件路径。
【问题讨论】:
-
你必须查看你的库是如何链接的(通过运行
otool -L来对抗它)。如果其中有硬编码的绝对路径,你别无选择,只能使用install_name_tool来更改它们(除非你想将依赖项符号链接到它想要的绝对路径中)。 -
顺便说一句,这是一个奇怪的安装布局——它有点像一个框架,有点像一个传统的 Unix /opt 子目录,但实际上两者都不是。因此,我不确定您是否可以期望标准的 OS X 机制透明地使用它。
-
对不起,应该提到这一点。我已经通过 otool 进行了检查(这是我首先想到的);所涉及的一切都只是库名称(只有一个硬编码路径,涉及其他内容)。无论出于何种原因,python 只是不想在 /usr/local/lib 之外查看
标签: python postgresql psycopg2