![](https://satolog.org/wp-content/uploads/2021/06/cx-freeze.png)
自作したプログラムを配布したい時ってありますよね。私はPythonであるプログラムを作り、配布したいと思いました。そこで、配布先の人がPythonをインストールしなくても起動できる形式で配布する方法を調べたので紹介します。検索して出てきたのは下の4つで、そのうち3つを試したのでおすすめを紹介します!
配布する方法4選
方法 | 手軽さ | おすすめ | 配布ファイル形式 | |
1 | PyInstaller | ◎ | 〇 | exe |
2 | Python embeddable | △ | △ | フォルダ |
3 | cx_Freeze | 〇 | ◎ | インストーラー |
4 | py2exe | ? | ? | ? |
おすすめ度に関しては、私が今回Tkinterでプログラムを作成したので、Tkinterプログラムを配布する上でのおすすめ度です。
PyInstaller
調べてみた感じ、PyInstallerが一番一般的なのかなと感じました。PyInstallerはプログラムをexe化するものです。なんと実行方法は下の1行のみです。プロンプト上で行います。
- 初回のみ
pip install pyinstaller
- PyInstallerインストール完了後
pyinstaller ファイル名 -–onefile -–noconsole
「Hello, World!」を画面に表示させるだけの単純なTkinterプログラムではうまくPyInstallerが機能したことが確認出来ました。おそらくTkinterでなく、CUIのプラグラムもexe化出来ると思います。
しかし、ソースコードが500行以上で容量が24KBのTkinterのプログラムだと、PyInstallerで生成したファイルが起動しませんでした。
ちなみに24KBのコードがexe化すると104MBのexeファイルになりました笑。
ただPyInstallerは本当に手軽なので、簡単なプログラムの場合はとりあえずpyinstallerを試してみて、ダメだったら他の方法を取るようにします。
参考サイト
Python embeddable
TkinterのプログラムがPyInstallerでやっても上手く起動しなかったので、Python embeddableを試しました。
Python embeddableはTkinterファイルの場合は少し面倒でした笑。詳しくは参考サイトを見てください。手順は
- Windows x86-64 embeddable zip fileのインストール
- cmdファイルとプログラムファイルを上のファイルに入れる
- (Tkinterの場合)PythonのProgramファイルからTkinterのモジュールファイル?を上のファイルに入れる
という感じです。cmdファイルのソースコードは短かいので手間ではないです。
cd /d %~dp0
python.exe (ファイル名).py
Python embeddableはexe化するものではありません。Pythonの標準モジュールが集まったファイル内で起動します。配布するファイル数は多くなりますが、相手がPythonをインストールする必要はありません。
ちなみに、Tkinterで「Hello, World!」を表示させるだけの単純なプラグラムでさえもうまく動作しませんでした泣。理由は、ソースコードを最後まで読んだ後、コマンドプロンプトが自動的に閉じてしまい、Tkinterのウィンドウも同時に閉じてしまうからです。
さらに、ソースコードが500行以上で24KBのTkinterのプラグラムをPython embeddableに入れて実行したところ、Tkinterのモジュールを入れたはずなのに、Tkinterが入っていないというエラーが出ました泣。この場合、24KBのソースコードを配布ファイルにすると80MBになりました。
参考サイト
![](https://tanakatarou.tech/wp-content/uploads/2020/06/code_template.jpg)
![](https://tanakatarou.tech/wp-content/uploads/2020/07/4c85c234076325c638e2c305400f29d6.jpg)
cx_Freeze
PyInstallerもPython embeddableでもTlinterプログラムを配布ファイルに出来なかったのでcx_Freezeを試しました。結論から言うとcx_Freezeで無事にTkinterプラグラムをインストーラー化することが出来ました!kotai2003さん、ありがとうございました!方法は以下の通りです。(Anaconda環境の場合)
- (初回のみ)cx_Freezeのインストール
conda install -c conda-forge cx_freeze
- setupファイルの作成
import sys
from cx_Freeze import setup, Executable
base = None
if sys.platform == 'win32':
base = 'Win32GUI'
executables = [
Executable('(プログラムファイル名).py', base=base)
]
setup(name='(インストーラー名)',
version='0.2',
description='Sample cx_Freeze Tkinter script',
executables=executables
)
- プロンプト上でsetupファイルの起動
python setup.py bdist_msi
ちなみに24KBのコードがexe化すると493MBのインストーラーになりました笑。
そしてインストーラーを起動すると「lib」というファイル1つとexeファイル1つとdllファイルが2つ生成しました。4つの合計の容量は1.37GBです笑。デカ過ぎ笑。
そして、生成したexeファイルを起動してみると
![](https://satolog.org/wp-content/uploads/2021/06/dll_error-1.png)
こんなエラーが泣。
これが出てしまった場合はMicrosoftサイトからvcredist_x64.exeをダウンロードすれば大丈夫です!
ダウンロードすると無事にエラーが消えました。配布する時は、取扱説明書に上記のエラーの対処法も書いておいた方がいいでしょう。
参考サイト
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JTVCUHl0aG9uJTVEJTIwY3hfRnJlZXplJUUzJTgxJUE3VGtpbnRlciVFMyU4MSVBRSVFMyU4MyU5NyVFMyU4MyVBRCVFMyU4MiVCMCVFMyU4MyVBOSVFMyU4MyVBMCVFMyU4MSVBRSVFOSU4NSU4RCVFNSVCOCU4MyVFMyU4MyU5NSVFMyU4MiVBMSVFMyU4MiVBNCVFMyU4MyVBQiVFMyU4MiU5MiVFNCVCRCU5QyVFNiU4OCU5MCVFMyU4MSU5OSVFMyU4MiU4QiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9NzFlNDM5YjI0YTNhNjQxYzc3ZDk4YTQzYjNjODMwMzU&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrb3RhaTIwMDMmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTdlYzBlYjEwOTBmMDlmODE5MjdkMmQ1MzlhODFhMThm&blend-x=142&blend-y=486&blend-mode=normal&s=0451a34156b39f420d5cc860ae0fc35f)
![](https://img.halpas.com/v7/_i10_/wp-content/uploads/2020/07/The-code-cannot-continue-to-run-because-VCRUNTIME140.dll-was-not-found-1.png)
py2exe
PyInstallerの参考サイトに載っていましたが、試すところまでいっていません。上記の3つの方法でもダメだった場合に試してみてはどうでしょうか?
まとめ
PyInstallerとPython emmbeddableとcx_FreezeでTkinterプラグラムを配布ファイルにしてみました。
単純なプラグラムはPyInstallerでexe化し、複雑なTkinterファイルはcx_Freezeでインストーラーを生成するのがいいと思いました。
コメント