0

私のコンピューターでテストされ、完全に動作する 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

SOとGoogleでコードを広範囲に検索して変更しましたが、役に立ちませんでした。psycopg2 リンクも、特にこの問題に対処していません。http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/

ソース、macports、自作などからビルドして、psycopg2とpostgresqlを何度も削除して再インストールしました。現在の環境は上記にリストされており、postgresql 9.2.4が自作でインストールされ、psycopg2-2.5がソースからインストールされ、pg_configの場所を明示的にリンクしていますsetup.cfg で

_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/ のシステム ファイルを "frameworks" オプションに含めません。

4

1 に答える 1

0

_psycopg.so のコピーは、postgresql 9.2.4 の自作ビルドの libpq ではなく、libpq のシステム インストールにリンクされています。

このため、アプリケーションは OSX 10.8 を実行しているシステムでのみ動作します。

解決策は、psycopg2 を再構築し、それが PostgreSQL の自作ビルドにリンクされていることを確認することです。

py2app は、共有ライブラリを含めるように明示的に指示された場合でも、/usr/lib からアプリケーション バンドルにファイルをコピーしないことに注意してください。これは、/usr 内のファイルがシステム ファイルであり、それらを再配布することはせいぜい危険な wrt ライセンスであると想定しているためです。

于 2013-05-15T09:41:47.793 に答える