Posted at

PyAutoGUIを使ったPythonアプリをexe化するまで


Pythonアプリを、Python入っていないPCで動かすには

自作のPythonアプリをビルド(= exe化)して、Pythonが入っていないPCでも動かせるようにするための手段としては、Windowsの場合は、


  1. PyInstaller

  2. 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に上げたらなんと解消。

これでようやく目的を達成できた。


思ったこと

いつもいつも、ネットの皆様に助けられてばかりですね。

なんだかんだで、ホントに良い時代になったものです。