1

py2app でアプリをビルドしようとしています。アプリをビルドできますが、実行するとImportErrorコンソールに表示されます。インポート エラーは、No module named PythonAppすべてのソースが含まれているフォルダーと、その場所がPYTHONPATH.

名前空間の問題を回避するためfrom PythonApp import fileだけではなく、ローカル ファイルをインポートしてきました。import file

次のフラグを使用してビルドしようとしましたがpython setup.py py2app --use-pythonpath、違いはないようです。

  • import ステートメント全体を に変更する必要がありimport fileますか?
  • どうすればpy2appに私のを実現させることができPYTHONPATHますか?
4

1 に答える 1

1

あなたの問題をよく理解していれば、次のレイアウトがあります。

PythonApp/
  __init__.py
  file.py
  foo.py

fileそして、モジュールをfoo.pybyからインポートしようとしますfrom PythonApp import file。これが を設定したい唯一の理由PYTHONPATHである場合、より簡単な解決策があります:相対インポートを使用します:

from . import file

from .. import fileなどのサブパッケージで使用できますPythonApp。このようにして、標準モジュールとの名前の衝突を避けることができます。

他の理由でインポート パスをハックする必要がある場合sys.pathは、起動スクリプトで変数を設定することもできます (おそらく py2app にもいくつかのオプションがあります)。ただし、インポート パスに外部ディレクトリを追加すると、アプリ バンドルの配布が難しくなることに注意してください。

また、より簡単な説明ImportErrorは、py2app がパッケージをアプリ バンドルにコピーしなかったことです。packagesすべてのパッケージが のパラメータにリストされていることを確認してくださいsetup()

于 2011-11-20T22:19:02.253 に答える