オフライン環境でPyInstallerをインストールする為のTips
April 29, 2020
こんにちは。底辺SIerのマサキです。
「Pythonで作ったツールを他の人に渡したいけど、わざわざPythonをインストールさせるのも悪い気がする」
底辺SIerをやっていると、こういった場面によく出会します。
そこで役に立つのが、PythonをWindows用のexeファイルに変換してくれるモジュール「PyInstaller」です。
本来であれば、pipを使えば一発でインストールができるのですが、ド底辺SIer企業ではインターネットに接続された開発PCなどありません。
過酷な環境下でも、
「自分が苦労してでも利用者には苦労をかけたくない」
そんな「優しさ駆動開発」を提唱している方々に、「オフライン環境でPyInstallerをインストールする為のTips」をお届けします。
環境
・OS: Windows7
・Python: 3.7.5
・PyInstaller: 3.6
まずは普通にインストールしてみる
- PyWin32(https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/)をインストール
- PyInstallerのgithubから zipをダウンロード (https://github.com/pyinstaller/pyinstaller/archive/master.zip)
- ダウンロードしてきたzipを適当なディレクトリに解凍
- 解凍して出てきた「pyinstaller-master」のパスを環境変数に追加する
- 「python setup.py install」を実行
- すると「pkg_resources.DistributionNotFound」というエラーが発生 調べてみるとsys.pathが不足しているっぽいが解決方法が分からず断念
setup.pyを使わずにやってみる
- PyWin32(https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/)をインストール
- PyInstallerのgithubから zipをダウンロード (https://github.com/pyinstaller/pyinstaller/archive/master.zip)
- ダウンロードしてきたzipを適当なディレクトリに解凍
- 解凍して出てきた「pyinstaller-master」のパスを環境変数に追加する
- cmdを開き、exe化したいPythonファイルがあるディレクトリにcd
- 「python pyinstaller.py “pythonファイル名”」を実行
- エラーが何個か出るので、下記の対応を行う
エラー内容: [“Please install PyWin32 or pywin32-ctypes”]
対応: 「pyinstaller-master\PyInstaller」にある「compat.py」が悪さをしているので修正する
修正前
from win32ctypes.pywin32 import pywintypes
from win32ctypes.pywin32 import win32api
修正後
import pywintypes
import win32api
エラー内容: [“ImportError: No module named altgraph”]
対応: 「altgraph」というモジュールをインストールする
- pypiからaltgraphのwhlをダウンロードする(https://pypi.org/project/altgraph/#files)
- cmdでダウンロードしたファイルが配置されているディレクトリに移動
- 「pip install —no-deps altgraph-0.17-py2.py3-none-any.whl」を実行(whlファイル名はダウンドードしたものに合わせてください)
エラー内容: [“ImportError: No module named pefile”]
対応: 「pefile」というモジュールを配置する
- pypiからpefileのtar.gzをダウンロードする(https://pypi.org/project/pefile/#files)
- tar.gzを解凍し、解凍されたディレクトリの中身を全てコピー
- 「pyinstaller-master」フォルダにコピーしたものを配置(一部のファイルは上書きするかを問われるので「いいえ」を押す)
上記でエラーの対応は環境です。
再度、手順5の”「python pyinstaller.py “pythonファイル名”」を実行”をやってみましょう。
無事にexeファイルが生成されるはずです。