Postgresql Psycopg2 Python应用程序的部署问题

Postgresql Psycopg2 Python应用程序的部署问题,postgresql,python-2.7,psycopg2,py2app,libpq,Postgresql,Python 2.7,Psycopg2,Py2app,Libpq,我已经用Python创建了一个应用程序,该应用程序在我的计算机上经过测试并运行良好(Mac OSX 10.8.3 Python2.7.3 Postgresql9.2.4 Psycopg2-2.5)。该应用程序是使用py2app编译的,我可以看到构建成功地将所有包/模块都包含到了application Content文件夹中 Psycopg2在我的机器上正确导入,应用程序运行正常,但当应用程序在另一台计算机上运行时(我尝试了4台不同的计算机…),它无法打开,并且控制台消息显示 ImportErro

我已经用Python创建了一个应用程序,该应用程序在我的计算机上经过测试并运行良好(Mac OSX 10.8.3 Python2.7.3 Postgresql9.2.4 Psycopg2-2.5)。该应用程序是使用py2app编译的,我可以看到构建成功地将所有包/模块都包含到了application Content文件夹中

Psycopg2在我的机器上正确导入,应用程序运行正常,但当应用程序在另一台计算机上运行时(我尝试了4台不同的计算机…),它无法打开,并且控制台消息显示 ImportError:dlopen(/Applications/app.app/Contents/Resources/lib/python2.7/psycopg2//\u psycopg.so,2):未加载库:libpq.5.dylib

我已经通过S.O.和谷歌广泛搜索和修改了我的代码,但毫无结果。psycopg2链接也没有专门解决此问题

我已多次删除并重新安装psycopg2和postgresql,从源代码、macports、homebrew等构建。上面列出了我当前的环境,其中postgresql 9.2.4与homebrew一起安装,psycopg2-2.5从源代码处安装,同时在setup.cfg中显式链接pg_config位置

当我在psycopg上运行一个otool-l时,我得到以下结果

/usr/lib/libpq.5.dylib (compatibility version 5.0.0, current version 5.4.0)
/usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 47.0.0)
/usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 47.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

我构建的应用程序如何包含(或将目标用户指向文件,如果可用)这些文件?这是正确的方法吗?当然,Py2app不会在“frameworks”选项中包含来自/usr/lib/的系统文件

您的_psycopg.so副本与libpq的系统安装相关联,而不是与postgresql 9.2.4的自制版本中的libpq相关联

因此,您的应用程序只能在运行OSX 10.8的系统上运行

解决方案是重建psycopg2并确保它链接到PostgreSQL的自制版本


请注意,py2app不会将文件从/usr/lib复制到应用程序捆绑包中,即使明确要求包含共享库,因为它假定/usr中的文件是系统文件,而重新分发这些文件充其量只是不可靠的w.r.t.许可证。

Ronald-感谢您的明确表述。我意识到我的错误。我的应用程序构建现在包括libpq框架,并在可分发的应用程序中正确链接。附加的动态库文件与/usr/lib中的一样好