2013-05-14 31 views
0

我已經在我的計算機上測試並完美運行了Python中的應用程序(Mac OSX 10.8.3 Python2.7.3 Postgresql9.2.4 Psycopg2-2.5)。該應用程序使用py2app編譯,我可以看到,構建成功地將所有包/模塊包含到應用程序內容文件夾中。Psycopg2 Python應用程序的部署問題

Psycopg2正確導入我的機器上,並且應用程序運行正常,但是當應用程序的另一臺計算機上運行(我已經嘗試了4臺不同的電腦......),它無法打開,並且控制檯消息讀取 ImportError:dlopen(/Applications/app.app/Contents/Resources/lib/python2.7/psycopg2/_psycopg.so,2):Library not loaded:libpq.5.dylib

我已經搜索並修改了我的代碼廣泛地通過SO和谷歌無濟於事。 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位置。當我運行otool -l上_psycopg.so,我得到以下

/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 /的系統文件。

回答

0

您的_psycopg.so副本與libpq的系統安裝相關聯,而不是來自家庭釀造的postgresql 9.2.4的libpq。

因此,您的應用程序僅適用於運行OSX 10.8的系統。

解決方案是重建psycopg2並確保它與PostgreSQL的自制構建版本鏈接。

請注意,即使明確告知包含共享庫,py2app也不會將/ usr/lib中的文件複製到應用程序包中,因爲它假定/ usr中的文件是系統文件,並且重新分配這些文件最多隻能是wy.t.t.許可證。

+0

羅納德 - 謝謝你的清晰表達。我意識到我的錯誤。我的應用程序構建現在包含libpq框架,並且在可分發內部正確鏈接。額外的dylib文件和/ usr/lib中一樣好 – LouisL