pyinstallerのspecの書き方

#はじめに

# .specの使い方


```Python:your_spec_file.spec
# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(['your_script.py'],
             pathex=['/path/to/your/script'],
             binaries=[],
             datas=[('./image/favicon.ico', 'image')], # favicon.icoを含める場合
             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,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='output_name',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False, # ウィンドウモード
          icon='./image/favicon.ico', # アイコンのパス
          )

```

使い方
```
pyinstaller your_spec_file.spec
```

## カスタマイズの場合

1. 'your_script.py'：コンパイルするPythonスクリプトの名前。
1. '/path/to/your/script'：Pythonスクリプトのパス。
1. 'output_name'：出力されるEXEファイルの名前。
1. console=False：ウィンドウモードを選択する場合。
1. icon='./image/favicon.ico'：EXEファイルに付けるアイコンのパス。

## 詳細説明

この行は、スクリプトの暗号化に使用されるブロック暗号を定義します。
通常、暗号化は使用されないため、Noneと設定されます。
```Python
block_cipher = None
```


a = Analysis(...): このセクションは、スクリプトの依存関係の解析を行うための設定です。
```Python
a = Analysis(['your_script.py'],
             pathex=['/path/to/your/script'],
             binaries=[],
             datas=[('./image/favicon.ico', 'image')], # favicon.icoを含める場合
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
```



['your_script.py']: コンパイルするPythonスクリプトの名前。
pathex: スクリプトのパス。
binaries: 追加のバイナリファイルのリスト。
datas: 追加のデータファイル（例：画像など）。
win_no_prefer_redirects, win_private_assemblies, cipher, noarchive: これらはWindows固有の設定で、通常はデフォルト値を使用します。

pyz = PYZ(...): このセクションは、スクリプトとその依存関係をアーカイブにパックする設定です。cipherは前述のblock_cipherと関連しています。

```Python
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
```

exe = EXE(...): このセクションは、最終的な実行ファイル（EXE）の作成に関連する設定です。

name: 出力されるEXEファイルの名前。
debug: デバッグモードの有効/無効。
strip: シンボルの削除（ファイルサイズの削減）。
upx: UPX圧縮の有効/無効。
console: コンソールモード（True）またはウィンドウモード（False）。
icon: アイコンのパス。

```Python
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='output_name',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False, # ウィンドウモード
          icon='./image/favicon.ico', # アイコンのパス
          )
```

```Python
```

参考資料：

1.エラーが出たらまずこの記事を参照しましょう。

https://qiita.com/kunishou/items/b2e8754886107292926d

2. scikit-learn

https://qiita.com/niwataka/items/7712c38d287b50479cd4

3.よくわからんエラーの場合

https://qiita.com/rebellious-wimp/items/61f16389f957b2ace163

4. OpenCV対応（神対策）

https://qiita.com/matsu_mh/items/789ae0fa7bfacbdc5829

5. Pypylon

https://github.com/basler/pypylon/issues/508

6. scikit-learn  (pyinstallerとscikit-learnは相性があまり良くない印象）

https://github.com/pyinstaller/pyinstaller/issues/3688

7. PyinstallerとOne Driveの相性はよくない。