Pythonコードはどうやって配布する?
Pythonで作ったプログラムを他の人にも使ってもらいたい場合、どうやって配布するかが悩ましいですね。
例えば、Anaconda(Jupyter Notebook)で職場の事務作業を自動化するプログラムを書いたとしましょう。
親切なあなたは、自分だけでなく周りの人にもぜひ使ってもらいたいと考えます。
ですが、職場にAnacondaがインストールされているとは限らないですし、みんながプログラムに詳しいわけでもありません。
**アナコンダ?なにそれ、蛇ですか?**みたいな人に「まずJupyter Notebookを起動して、ipynbファイルを選択して…」なんて説明しても首ををかしげられるのがオチです。
Pythonはexe化すればワンクリック!
Pythonコードも**exeファイル(エクゼファイル)**に変換すれば、クリックするだけで実行することができます。
これなら、プログラムに詳しくない人でも簡単に実行できます。
ここではAnaconda(Juypter Notebook)で書いたPythonのプログラムをexeファイルにする方法を解説します。
大まかな流れは下記のとおりです。
###手順
- pyinstallerをインストールする
- .pyファイルを用意する
- Anaconda Promptを開き.pyファイルのある場所に移動する
- pyinstallerコマンドで.pyファイルをexeファイルにする
- exeファイルを実行して動作確認する
##1. pyinstallerをインストールする
pythonコードをexeファイルにするにはいくつか方法がありますが、ここでは「pyinstaller」を使った方法をご紹介します。
pyinstallerはpip install pyinstaller
でインストールできます。
Anacondaを使っている場合は【Anaconda Prompt】を開き、以下のコマンドを入力しましょう。
pip install pyinstaller
もしくは、Jupyter Notebookのセルに
!pip install pyinstaller
と入力して実行してもいいです。
##2. .pyファイルを用意する
無事pyinstallerがインストールできたら、次はexeファイル化したいコードを「.pyファイル」にしておきます。
Jupyter Notebookの場合、そのままではipynbというファイル形式になっているので、これをpyファイルに変換する必要があります。
Jupyter Notebookのメニューから「File - Download as」でPython(.py)を選択して保存しましょう。
##3. Anaconda Promptを開き.pyファイルのある場所に移動する
【Anaconda Prompt】を起動します。
そして、cdコマンドで先ほど保存したpyファイルがある場所に移動します。
例えば、pyファイルがある場所が「C:\Users\konitech\sample」なら、下記のようにコマンドを打ちます。
cd C:\Users\konitech\sample
##4. pyinstallerコマンドで.pyファイルをexeファイルにする
そして、pyinstallerコマンドでexeファイルを作ります。
例えば、test.pyをexeファイルにしたいなら、下記のようにコマンドを打ちます。
pyinstaller test.py --onefile
--onefileというオプションがないと、いくつもファイルができてごちゃごちゃしていますので、exeファイル一本にまとめるためこの--onefileを指定しています。
###エラーになってしまう場合
ここでエラーになってしまってうまくいかない場合もあります。
私が実際にエラーになったパターンと対処法をご紹介します。
■ RecursionError: maximum recursion depth exceeded while calling a Python objectというエラー
再帰回数が多すぎる的な内容のようですが、よくわかりません。
調べてみるとpyinstaller test.py --onefile
を実行したときに作られる【test.specファイル】を少し修正すればいいことがわかりました。
test.pyと同じフォルダにtest.specファイルというものが作られていると思いますので、これをテキストエディタで開きます。
# -*- mode: python -*-
のすぐ下に下記を挿入して、上書き保存します。
import sys
sys.setrecursionlimit(5000)
そして、
pyinstaller test.spec
と先ほど編集したspecファイルを指定して、exeファイルを作成します。
■ Failed to execute script pyi_rth_pkgresというエラー
pyi_rth_pkgresというのが実行できない的なことを書いてありますが、やはりよくわかりません。
このときもやはりspecファイルを修正します。
specファイルに
a = Analysis(['test.py'],
pathex=['C:\\Users\\xxx'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
こんな箇所があると思います。ここのhiddenimportsにpkg_resources.py2_warnを書き加えます。
a = Analysis(['test.py'],
pathex=['C:\\Users\\xxx'],
binaries=[],
datas=[],
hiddenimports=['pkg_resources.py2_warn'],
hookspath=[],
そして、
pyinstaller test.spec
と先ほど編集したspecファイルを指定して、exeファイルを作成してみましょう。
##5. exeファイルを実行して動作確認する
無事作成が完了すると「dist」というフォルダができていて、その中にexeファイルが1つだけ入っていると思います。
これが完成したexeファイルです。
実行してきちんと動くことを確認してみましょう。
動いたら、このexeファイルを配布すればOKです。やったね!
参考
私の書いた他の自動化シリーズはこちらです。ご興味があればどうぞ!
【自動化】PythonでOutlookメールを送信する
https://qiita.com/konitech913/items/51867dbe24a2a4272bb6
【自動化】PythonでOutlookのメールを読み込む
https://qiita.com/konitech913/items/8a285522b0c118d5f905
【自動化】Pythonでメール(msgファイル)を読み込む
https://qiita.com/konitech913/items/fa0cf66aad27d16258c0