如何强制Python使用特定的库(psycopg2& osx)?

时间:2013-08-01 18:27:35

标签: python postgresql psycopg2

我弄清楚当前许多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/

中的第一个选项

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

/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使用预期的文件路径。

1 个答案:

答案 0 :(得分:1)

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

LD_LIBRARY_PATH由链接加载器用于linux / glibc,FreeBSD和其他一些* nix平台,但不是用于Mac OS X链接加载器。请参阅manpage for dyld了解的作用

显而易见的替代是DYLD_LIBRARY_PATH。但是,这可能不是你想要的(基本原因LD_LIBRARY_PATH通常是你想要的linux,但细节是不同的)。相反,您可能需要DYLD_FALLBACK_LIBRARY_PATH。简而言之,它的作用是更改用于主搜索路径中找不到的库的后备搜索路径(通常为~/lib:/usr/local/lib:/lib:/usr/lib),而不是更改主搜索路径,因此您可以提供缺失库,没有阻塞实际存在的库。 (尝试运行,例如,每种方式运行任何X11应用程序,以便非常简单地演示差异。)该联机帮助页解释了详细信息。

(顺便说一句,如果你想知道OS X的链接加载器有什么特别之处,他们觉得需要使用不同的环境变量,它主要是关于框架和版本控制,尽管你可以嵌入的自定义魔术路径也是NeXT或Apple的某个人可能认为使用相同的名称代表80%相同但20%不同的东西会更具误导性而不是有用......)