yashinoha
@yashinoha

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonプログラムのexe化について

解決したいこと

pyinstallerで作成したexeファイルを実行するとエラーが出て実行できない。

pythonで作成したPCアプリをpyinstallerを使用してexe化し、specファイルをカスタマイズして反映させたところまではよかったのですが、いざ動作確認をしようとexeファイルを開いてみたところ後述するエラーが出てしまいました。モジュールのインポートに失敗しているようなのですがmain.pyを直接実行したときはうまく動作するので改善点が分かりません。どなたか原因がわかる方がいらっしゃれば教えていただきたいです。

発生している問題・エラー

"Unhandled exeption in script"

Failed to execute script 'main' due to unhandledexeption:'module'object is not callable

Traceback (most recent call last):
  File "main.py", line 2, in <module>
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "gui.py", line 2, in <module>
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "kivy\__init__.py", line 293, in <module>
  File "PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py", line 67, in _pyi_pkgutil_iter_modules
TypeError: 'module' object is not callable

exeファイルの実行時にこのエラーが出ます。
ここに表記されているファイルも、main.pyとgui.py以外は作成した覚えも外部からインストールした覚えもないためnot callableといわれてもどうしたらいいのか分かりません。main.pyとgui.pyの2行目は下記の通り、guiモジュールとkivyのインポートを行っているので、kivy上で何か問題が起きたのではないかなと思っているのですが、お分かりの方がいたら教えていただけると幸いです。

該当するソースコード

#main.py 2行目
import gui

#gui.py 2行目
import kivy

また、カスタマイズしたspecファイルの内容も公開できる範囲で載せておきます。

a = Analysis(
    ['main.py'],
    pathex=['root\src'],
    binaries=[],
    datas=[
        ('sound/up.mp3', 'sound'),  # up.mp3 を sound ディレクトリに配置
        ('sound/down.mp3', 'sound')  # down.mp3 を sound ディレクトリに配置
    ],
    hiddenimports=[
        (ここに使用したライブラリや作成したモジュール(6個)などを全て入れました。)
    ],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)

pyz = PYZ(a.pure, a.zipped_data)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='アプリ名',
    icon = 'pic\アプリ名.jpg',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='アプリ名'
)

自分で試したこと

kivy,pyinstallerの再インストール
仮想環境の再構築(Anaconda)
python venvで仮想環境を作り直してpyinstallerで再度exe化(追記)

いずれも試した前後でも同様のエラーが出ました。

6

1Answer

Comments

  1. @yashinoha

    Questioner

    現在nuitkaを使用して試しているのですがこちらでも「FATAL: Failed unexpectedly in Scons C backend compilation.」というエラーが解決できなくて苦戦しています…
    バックエンドのコンパイルがうまくいかないということはソースコードの書き方が悪いのでしょうか…?

    --
    (追記)
    nuitkaでのexe化は成功しました!
    ただ、mainファイルにウィンドウを保持するプログラムを入れ忘れたようでexeファイルを起動しても一瞬で閉じてしまうのでこれから作り直します…

  2. pkgutil.iter_modulesというモジュールで問題が起こっているそうです。
    調べてみると、このモジュールはexe化すると正常に動作しないことがあるみたいです。
    対処方法までは調べられていません。申し訳ない。

  3. クローズしているけど、どのように解決したの?

Your answer might help someone💌