Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

思ったこと

いつもいつも、ネットの皆様に助けられてばかりですね。
なんだかんだで、ホントに良い時代になったものです。

chihiroyn
静岡県内に生息するエンジニア。 雑食系。本職はSIer。 Python好きです。そろそろ業務でちゃんと使いたい。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away