3

私のPython GUIアプリは完全に動作しますが、実行可能ファイルを作成しようとすると、pyinstaller (3.3.dev0+483c819) コマンドで試しました:

pyinstaller gui_app.py

次の問題が発生します。

7699 INFO: Loading module hook "hook-wx.lib.pubsub.py"...
Traceback (most recent call last):
  File "<string>", line 41, in <module>
  File "<string>", line 36, in walk_packages
  File "<string>", line 20, in walk_packages
  File "c:\python27\lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core\arg1\__init__.py", line 16, in <module>
    raise RuntimeError(msg)
RuntimeError: Should not import this directly, used by pubsub.core if applicable
8006 WARNING: Hidden import "wx.lib.pubsub.core.publisher" not found!
8008 WARNING: Hidden import "wx.lib.pubsub.core.listenerimpl" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.publishermixin" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.datamsg" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.topicargspecimpl" not found!
8009 WARNING: Hidden import "wx.lib.pubsub.core.topicmgrimpl" not found!

実行可能ファイルは「正常に」作成されましたが、起動すると次のエラーが表示されます。

Traceback (most recent call last):
  File "upload_test_run_dynamic_clean.py", line 21, in <module>
    from wx.lib.pubsub import pub
  File "c:\python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
    exec(bytecode, module.__dict__)
  File "site-packages\wx-3.0-msw\wx\lib\pubsub\pub.py", line 35, in <module>
  File "c:\python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
    exec(bytecode, module.__dict__)
  File "site-packages\wx-3.0-msw\wx\lib\pubsub\core\__init__.py", line 45, in <module>
ImportError: No module named publisher

hookspath を追加しようとしましたが、仕様ファイル (wx.lib.pubsub のフックが既に pyinstaller フック フォルダーに存在します) が機能しませんでした。または、何か問題がありました。

wx およびその他のサブモジュールをインポートする順序はありますか。私は自分のコードにこれを持っています

import wx
import wx.lib.pubsub.setuparg1
from wx.lib.pubsub import pub
import wx.lib.agw.pybusyinfo as PBI
from wx.lib.scrolledpanel import ScrolledPanel
4

4 に答える 4

1

これらのモジュールのインポートはサブフォルダー kwargs で行われるようですが、これらのファイルは実際にはルート フォルダーに配置する必要があります。

だから私はちょうどそれらのファイルをからコピーしました

Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core\kwargs

Lib\site-packages\wx-3.0-msw\wx\lib\pubsub\core

そして今、それは機能します!

于 2016-11-24T09:35:35.170 に答える
1

pyinstaller 3.4 のリリース後も同じ問題が発生しました。これは、pyinstaller で wx.lib.pubsub、PyPubSub、または pypubsub のいずれかを使用する場合の既知の問題です。https://github.com/pyinstaller/pyinstaller/issues/1530を参照してください。明らかに、インポートは回避するのが難しい方法で処理されます。PyPubSub と pypubsub は同じコード ベースのフォークであり、同じ問題が発生します。リリースごとに wx ディストリビューションのライブラリをハックしたくない場合は、次のオプションがあります。

  • PyDispatcher、binder、または別のより単純な pubsub ライブラリに切り替えます
  • PyPubSub を変更して、pyinstaller と互換性のある方法でモジュールをロードし、PR をプロジェクトに送信します。

最も抵抗の少ない方法は、別の pubsub ライブラリを見つけることです。最小限で小規模なプロジェクトに適したウィンカーに切り替えました。

別のヒント: pyinstaller には通常、安定したバージョンの組み合わせが 1 つあり、これはプラットフォームごとに異なることに注意してください。

于 2018-01-17T16:45:34.507 に答える