【问题标题】:Deployment issues of Psycopg2 Python AppPsycopg2 Python App的部署问题
【发布时间】:2013-05-09 05:02:48
【问题描述】:

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

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

我已经通过 S.O. 广泛搜索和修改了我的代码。和谷歌无济于事。 psycopg2 链接也没有专门解决这个问题。 http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/

我已经多次删除并重新安装了 psycopg2 和 postgresql,从源代码、macports、自制软件等构建。上面列出了我当前的环境,使用自制软件安装了 postgresql 9.2.4,并在显式链接时从源代码安装了 psycopg2-2.5 setup.cfg 中的 pg_config 位置

当我在 _psycopg.so 上运行 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 当然不会在“框架”选项中包含来自 /usr/lib/ 的系统文件。

【问题讨论】:

    标签: postgresql python-2.7 psycopg2 py2app libpq


    【解决方案1】:

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

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

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

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

    【讨论】:

    • Ronald - 谢谢你的清晰表达。我意识到我的错误。我的应用程序构建现在包括 libpq 框架,并且在可分发文件中正确链接。额外的 dylib 文件就像在 /usr/lib 中一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2021-01-20
    • 2016-11-26
    • 2014-08-21
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多