0

我弄清楚了当前许多 osx 安装的根本问题是什么(例如http://psycopg.lighthouseapp.com/projects/62710/tickets/111-library-not-loaded-libssl100dylibpython pip install psycopg2 install error )

很多人使用 EnterpriseDB 的 PostgreSQL 安装程序;可能是因为它是http://www.postgresql.org/download/macosx/中的第一个选项

如果您使用它进行安装,它会将所有需要的二进制文件和库安装到它的私有版本空间中......

IE

/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 加载,而不是它编译的库(或应该期待)

我尝试使用环境变量( LD_LIBRARY_PATH , LD_PRELOAD ),但似乎无法完成这项工作。除非(正确的)文件是 /usr/local/lib ,否则 psycopg2 不想导入。

我不喜欢其他人在这里提到的重写或链接这些文件的解决方案;必须有一种方法可以强制 Python / psycopg2 使用预期的文件路径。

4

1 回答 1

1

您的问题是您使用了错误的环境变量。

LD_LIBRARY_PATH由 linux/glibc、FreeBSD 和其他一些 *nix 平台的链接加载器使用,但不适用于 Mac OS X 链接加载器。有关确实存在的内容,请参见手册页。dyld

明显的替代品是DYLD_LIBRARY_PATH. 但是,这可能不是您想要的(出于相同的基本原因LD_LIBRARY_PATH,通常是您在 linux 上想要的,但细节不同)。相反,您可能想要DYLD_FALLBACK_LIBRARY_PATH. 简而言之,这样做是更改用于在主搜索路径中未找到的库的回退搜索路径(通常~/lib:/usr/local/lib:/lib:/usr/lib),而不是更改主搜索路径,因此您可以提供缺失的库,而不会阻塞实际存在的库。(尝试以各种方式运行任何 X11 应用程序,以非常简单地演示差异。)手册页解释了详细信息。

(顺便说一句,如果你想知道 OS X 的链接加载器有什么特别之处,以至于他们觉得需要使用不同的环境变量,这主要是关于框架和版本控制,尽管你可以嵌入的自定义魔法路径也很相关。有人在 NeXT 或苹果公司大概认为使用相同的名称来表示 80% 相同但 20% 不同的东西会更容易误导而不是有帮助……)

于 2013-08-01T19:07:40.757 回答