どうも、nippa です。
python のライブラリの pyinsteller を使って配布用の実行ファイルの作成ができます。
プログラマを他人に渡したいが、ソースコード自体は渡したくないような場合に便利です。
少し使ってみたところ意外と便利だったため、まとめておこうと思います。
pyinstaller の公式を参考にしています。
- 環境
- pyinstaller のインストール
- pyinstaller の基本
- 複数の python ファイルの1つの実行ファイル化
- pyinstaller の設定ファイルを利用
- spec ファイルの設定
- 感想
環境
pyinstaller のインストール
- pip でインストールする場合
pip install pyinstaller
- Anaconda でインストールする場合
conda install pyinstaller
pyinstaller の基本
pyinstaller [スクリプト名]
を実行するとdist/[スクリプト名]
ディレクトリに実行ファイル化されたファイル群が作成されます。
配布する場合は、ディレクトリの中身をすべて渡す必要があります。
また、生成された実行ファイルを別環境で利用する場合は import している python ライブラリを別環境でもインストールが必要です。
コンソールへの出力が不要な場合は、-w
を指定することでコンソール出力させなくすることができます。
pyinstaller -w [スクリプト名]
複数の python ファイルの1つの実行ファイル化
pyinstaller -F [スクリプト名]
Mac であれば app ファイル、Windows であれば exe ファイルがdist
内に生成されます。
-F
もしくは--onefile
オプションは mac、windows 共通オプションになります。
pyinstaller の設定ファイルを利用
pyinstaller をインストールすると pyi-makespec
というコマンドもインストールされます。
このコマンドは pyinstaller の設定ファイルを生成するコマンドになります。
pyi-makespec [スクリプト名]
オプションが色々あるので指定する、もしくは生成される spec ファイルを編集することで pyinstaller 実行時の設定を指定することができます。
spec ファイルからの pyinsaller の実行は以下のとおりです。
pyinstaller [specファイル名]
spec ファイルの設定
spec ファイルの内容は以下の通りです。
# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['test.py'], pathex=['path'], binaries=[''], datas=[''], hiddenimports=[], hookspath=[], 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='test', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=True ) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, upx_exclude=[], name='test')
実行ファイルの指定(--add-binary)
pyinstaller を実行する場合には、--add-binary
オプションで指定することができます。
Mac の場合
pyinstaller [スクリプト名] --add-binary "参照先のパス:ビルド時に配置する位置"
Windows の場合
pyinstaller [スクリプト名] --add-binary "参照先のパス;ビルド時に配置する位置"
また、spec ファイルに期日する場合はbinaries
に python のタプル形式で指定します。
('参照先のパス','ビルド時に配置する位置')
spec ファイルへの記述は以下のようになります。
binaries=[('../bin/test1', '../bin'), ('../bin2/test*', '../bin'),],
データファイルの指定(--add-data)
pyinstaller を実行する場合には、--add-data
オプションで指定することができます。
Mac の場合
pyinstaller [スクリプト名] --add-data "参照先のパス:ビルド時に配置する位置"
Windows の場合
pyinstaller [スクリプト名] --add-data "参照先のパス;ビルド時に配置する位置"
python ファイルを実行する際に必要なデータは、datas
にてタプル形式で指定します。
('参照先のパス','ビルド時に配置する位置')
spec ファイルへの記述は以下のようになります。
datas=[('../data1/data*', '../data'), ('../data2/data.csv', '../data'),],
同梱するライブラリの指定(--hidden-import)
pyinstaller を実行する場合には、--hidden-import
オプションで指定することができます。
pyinstaller [スクリプト名] --hidden-import "ライブラリ名"
python ファイルを実行する際に必要なデータは、ライブラリは hiddenimports
に list 形式で指定します。
hiddenimports = ['json', 'matplotlib.pyplot', 'matplotlib.dates']
hiddenimports
に指定することで、ライブラリが同梱されるため、別環境でライブラリのインストールが不要になります。
感想
python スクリプト配布用などに実行ファイル化を pyinstaller を使って行ってみました。
方法がわかると非常に簡単にできますね。
ぜひ、試してみてください。
ではでは、また次回。