どうも、nippa です。
python のライブラリの pyinsteller を使って配布用の実行ファイルの作成ができます。
プログラマを他人に渡したいが、ソースコード自体は渡したくないような場合に便利です。
少し使ってみたところ意外と便利だったため、まとめておこうと思います。
pyinstaller の公式を参考にしています。
環境
pyinstaller のインストール
pip install pyinstaller
conda install pyinstaller
pyinstaller の基本
1 ファイルの python スクリプトの場合
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 ファイルの内容は以下の通りです。
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
オプションで指定することができます。
Mac / Windows の場合
pyinstaller [スクリプト名] --hidden-import "ライブラリ名"
python ファイルを実行する際に必要なデータは、ライブラリは hiddenimports
に list 形式で指定します。
hiddenimports = ['json', 'matplotlib.pyplot', 'matplotlib.dates']
hiddenimports
に指定することで、ライブラリが同梱されるため、別環境でライブラリのインストールが不要になります。
感想
python スクリプト配布用などに実行ファイル化を pyinstaller を使って行ってみました。
方法がわかると非常に簡単にできますね。
ぜひ、試してみてください。
ではでは、また次回。