見出し画像

Pythonのファイルからexeファイルを生成する

はじめに

Pythonのファイルからexeファイルを生成するpyinstallerを使用します。

インストール

インストールコマンドは

pip install pyinstaller

です。パスが通っていないとコマンド実行時に「The term 'pyinstaller' is not recognized as a name of a cmdlet, function, script file, or executable program.」というエラーがでますので、パスを通しましょう。

パスを通す場所はインストールコマンド実行時に表示されます。

実行方法

Pythonのファイルをmain.pyとすると

pyinstaller main.py --onefile

で実行できます。main.pyと同じディレクトリにdistというディレクトリが生成され、その中にmain.exeができているはずです。後は普通のexeファイルの扱い方と同じです。

実行時、自分が作っていないファイルが見つからないエラーが出る場合

実行時、「FileNotFoundError」が発生し、プログラムが終了することがありました。問題となった部分はMediaPipeというパッケージを使用していた部分でした。正体はexe化するファイルが足りない場合に発生するエラーです。対策として関係するファイルを全て指定するなどの方法が必要ですが、あまりにもファイルが多い場合はspecファイルでまとめて指定できます。

specファイル

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['main.py'],
            pathex=['.'],
            binaries=[],
            # 追加部分 ......にはmediapipeまでつながるようなパスを書いて下さい
            datas=[('C:\\Users\\.......\\mediapipe', 'mediapipe'),],

            hiddenimports=[],
            hookspath=[],
            hooksconfig={},
            runtime_hooks=[],
            excludes=[],
            win_no_prefer_redirects=False,
            win_private_assemblies=False,
            cipher=block_cipher,
            noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
            cipher=block_cipher)

exe = EXE(pyz,
         a.scripts, 
         [],
         exclude_binaries=True,
         name='main',
         debug=False,
         bootloader_ignore_signals=False,
         strip=False,
         upx=True,
         console=True,
         disable_windowed_traceback=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='main')

mediapipeまでつながるようなパスはインストール時のパスを確認すると分かると思います。

自分の場合は
C:\\Users\\ユーザー名\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python38\\site-packages\\mediapipe
にありました。

結果

無事exeファイルが作成できました。specファイルについては全く詳しくないので、時間がある人はじっくり調べてみても良さそうです。

参考


この記事が気に入ったらサポートをしてみませんか?