Pythonアプリを、Python入っていないPCで動かすには
自作のPythonアプリをビルド(= exe化)して、Pythonが入っていないPCでも動かせるようにするための手段としては、Windowsの場合は、
- PyInstaller
- py2exe
のほぼ2択っぽい。
Macだとpy2exeは使えないが、py2appというライブラリが使えるらしい(未確認)。
PyInstallerはpy2exeに比べて手軽に扱えるが、exe実行時の起動の速さは、py2exeの方に軍配が上がる、との話。
で、PyAutoGUIを使ったPythonアプリをpy2exeでexe化を試みたところ、最終的には乗り越えたものの、私の環境ではいろいろと壁があったのでメモっておく。
当方の環境
- Windows10
- Python 3.7
→ NGだったので3.4に切り替えて問題解消した
setup.pyの作成
py2exeでは、setup.pyというファイルを用意する必要がある。
setup.pyには、ビルドのための設定を書く。
↓ こちらを大いに参考にさせていただいた。Python2ベースの記事だが、Python3でも参考になる。
py2exeでPythonのスクリプトを実行ファイル(exe)にする【py2exe】- ku-mu*様
http://cocodrips.hateblo.jp/entry/2015/06/03/232419
Python3.7ではビルド時にエラー → Python3.4に乗り換える
しかし、Python3.7でまずビルドを試みるとエラー。
python .\setup.py py2exe
running py2exe
Traceback (most recent call last):
File ".\setup.py", line 11, in <module>
...
File "C:\Users\Chihiro\AppData\Local\Programs\Python\Python37\lib\distutils\core.py", line 148, in setup
dist.run_commands()
...
File "C:\Users\Chihiro\Techpit-Market\instagram-auto\lib\site-packages\py2exe\mf3.py", line 417, in _scan_opcodes
yield "store", (names[oparg],)
IndexError: tuple index out of range
living-sun.comでのQAによると、
https://living-sun.com/ja/python/707242-compiling-python-script-to-exe-with-py2exe-getting-error-python-selenium-py2exe-helium.html
現在py2exeは3.4までのPythonをサポートしています
何ということでしょう……。
ということでPython3.4に切り替える。
Windowsでは複数バージョンのPythonを共存できるらしい
なんと。寡聞にして存じ上げなかった。
Windows で複数バージョンの Python を使う@landwarrior様
https://qiita.com/landwarrior/items/1b5e0f9af5316a025fe0
Python3.4を入れた後、
$ py -3.4 -m venv foo
で、3.4のvenv環境を作れる。
しかし3.4上でPyAutoGUI入れられず → setuptoolsのバージョン上げて解消
pip install PyAutoGUI
Collecting PyAutoGUI
Using cached
...
Complete output from command python setup.py egg_info:
C:\Python34\lib\distutils\dist.py:260: UserWarning: Unknown distribution option: 'long_description_content_type'
warnings.warn(msg)
error in PyAutoGUI setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Expected version spec in pyobjc-core;platform_system=="Darwin" at ;platform_system=="Darwin"
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Chihiro\AppData\Local\Temp\pip-build-6qgzk2sj\PyAutoGUI
...
zhgmen様より。
https://www.cnblogs.com/zhgmen/p/11205280.html
pip install setuptools -U
でこれも解消。
しかし今度はPillowが入らず → pipのバージョン上げて解消
さすがにそろそろくじけそうになるが、
Collecting Pillow (from PyAutoGUI)
Downloading
...
C:\Users\Chihiro\AppData\Local\Temp\pip-build-95awba34\Pillow\setup.py:12: PkgResourcesDeprecationWarning: Parameters to load are deprecated. Call .resolve and .require separately.
import os
Traceback (most recent call last):
File "<string>", line 20, in <module>
...
File "C:\Users\Chihiro\AppData\Local\Temp\pip-build-95awba34\Pillow\setup.py", line 324, in finalize_options
if sys.version_info.major >= 3 and not self.parallel:
File "C:\Python34\lib\distutils\cmd.py", line 103, in __getattr__
raise AttributeError(attr)
AttributeError: parallel
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Chihiro\AppData\Local\Temp\pip-build-95awba34\Pillow
ちょっとばかりふて寝した後、なんとなく、さっきはsetuptoolsのバージョン上げたら解消したんだから、今度はpipのバージョン上げたらどうかと考え、
$ python -m pip install --upgrade pip
して、pipを19.2.1に上げたらなんと解消。
これでようやく目的を達成できた。
思ったこと
いつもいつも、ネットの皆様に助けられてばかりですね。
なんだかんだで、ホントに良い時代になったものです。