exeファイル作成について

exeファイルはWindowsなら相手の環境に依らず実行することができる便利な拡張子。
pythonでexeファイルを作成するのはかなり簡単に出来るらしい。
(他の言語で作ったことがあるわけではないので、他の方が簡単とかであればすみません)

正直、exeファイルって作ったことないし、なんかいろんなツールを使って、複雑な手順を踏んでやっと作ることが出来る!と思っていました。

しかし、やってみるとあれ?そんなもんで出来るの?と簡単にできてしまった。 以下に手順をまとめました。参考にどうぞ。

exe化をやってみる

実行環境

  • windows10(64bit)
  • python3.7.4

まずは、「pyinstaller」のインストール

コマンドプロンプトで以下のコマンドを実行し、「pyinstaller」をインストールする。

pip install pyinstaller

pyinstaller インストール時にwheelがないとエラー発生

何故かわからないが、pyinstaller インストール時に以下のエラーが発生したので、その時の解決方法も載せておきます。

エラー内容

Collecting pyinstaller
Using cached https://files.pythonhosted.org/packages/e2/c9/0b44b2ea87ba36395483a672fddd07e6a9cb2b8d3c4a28d7ae76c7e7e1e5/PyInstaller-3.5.tar.gz
Installing build dependencies … done
Getting requirements to build wheel … done
Preparing wheel metadata … error
ERROR: Command errored out with exit status 1:
command: ‘c:\users\名前\appdata\local\programs\python\python37\python.exe’ ‘c:\users\名前\appdata\local\programs\python\python37\lib\site-packages\pip_vendor\pep517_in_process.py’ prepare_metadata_for_build_wheel ‘C:\Users\名前\AppData\Local\Temp\tmpd36w7jbl’
cwd: C:\Users\名前\AppData\Local\Temp\pip-install-jctnd3vp\pyinstaller
Complete output (36 lines):
running dist_info
creating C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.egg-info
writing C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.egg-info\PKG-INFO
writing dependency_links to C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.egg-info\dependency_links.txt
writing entry points to C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.egg-info\entry_points.txt
writing requirements to C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.egg-info\requires.txt
writing top-level names to C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.egg-info\top_level.txt
writing manifest file ‘C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.egg-info\SOURCES.txt’
reading manifest file ‘C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.egg-info\SOURCES.txt’
reading manifest template ‘MANIFEST.in’
Error in sitecustomize; set PYTHONVERBOSE for traceback:
SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0x8e in position 0: invalid start byte (sitecustomize.py, line 7)
no previously-included directories found matching ‘bootloader\build’
no previously-included directories found matching ‘bootloader.waf-‘ no previously-included directories found matching ‘bootloader.waf3-‘
no previously-included directories found matching ‘bootloader\waf-‘ no previously-included directories found matching ‘bootloader\waf3-‘
no previously-included directories found matching ‘bootloader_sdks’
no previously-included directories found matching ‘bootloader.vagrant’
warning: no previously-included files found matching ‘bootloader.lock-waf’ no previously-included directories found matching ‘doc\source’ no previously-included directories found matching ‘doc_build’ warning: no previously-included files matching ‘.tmp’ found under directory ‘doc’
warning: no files found matching ‘news_template.rst’
no previously-included directories found matching ‘news’
no previously-included directories found matching ‘old’
no previously-included directories found matching ‘scripts’
no previously-included directories found matching ‘tests\scripts’
no previously-included directories found matching ‘.github’
warning: no previously-included files found matching ‘.’ warning: no previously-included files found matching ‘.yml’
warning: no previously-included files found matching ‘*~’
warning: no previously-included files found matching ‘.directory’
writing manifest file ‘C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.egg-info\SOURCES.txt’
creating ‘C:\Users\名前\AppData\Local\Temp\pip-modern-metadata-mb0arma9\PyInstaller.dist-info’
error: invalid command ‘bdist_wheel’
—————————————-
ERROR: Command errored out with exit status 1: ‘c:\users\名前\appdata\local\programs\python\python37\python.exe’ ‘c:\users\名前\appdata\local\programs\python\python37\lib\site-packages\pip_vendor\pep517_in_process.py’ prepare_metadata_for_build_wheel ‘C:\Users\名前\AppData\Local\Temp\tmpd36w7jbl’ Check the logs for full command output.C:\WINDOWS\system32>pip install wheel; ./setup.py bdist_wheel
ERROR: Invalid requirement: ‘./setup.py’

長くて何言ってるかわからない。

どうやら「pyinstaller」をインストールするためには「wheel」というものが必要なようです。 さっそく「wheel」をインストール。

pip install wheel;

「wheel」は問題なくインストールできた。

Collecting wheel Using cached https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl Installing collected packages: wheel

Successfully installed wheel-0.33.6

もう一度本題の「pyinstaller」。

再度[pip install pyinstaller]を実行してみます。

\AppData\Local\pip\Cache\wheels\8b\99\a0\81daf51dcd359a9377b110a8a886b3895921802d2fc1b2397e Successfully built pefile future Installing collected packages: future, pefile, pywin32-ctypes, altgraph, pyinstaller Successfully installed altgraph-0.16.1 future-0.18.2 pefile-2019.4.18 pyinstaller-3.5 pywin32-ctypes-0.2.0

いけました!

上記の結果が得られ、インストール成功!

適当なpythonファイルを作成し、exeファイル作成

こんな感じで適当なpythonファイルを作成し、exeファイルを作成する。

print("aiueo")
input("")

exe作成コマンドは以下。実行してみた

pyinstaller test.py –onefile

※onefileオプションを付けると、exeファイル1ファイルのみを生成し、1ファイルのみで実行可能になります。このオプションを付けていないと、複数ファイル生成され、それらがないと実行できません。基本的につけておいて問題ないと思います。 ただし、seleniumを使用したpythonファイルは1ファイル化できないようです。

実行結果

以下のコマンドが出たら、exeファイル作成成功。

27091 INFO: Appending archive to EXE C:\Users[User]\Desktop\dist\test.exe 27645 INFO: Building EXE from EXE-00.toc completed successfully.

pythonファイルと同じディレクトリに以下のディレクトリ/ファイルが出力された。exeファイルはdistディレクトリ内にある。 その他のディレクトリ/ファイルはexe生成時の中間ファイルとのことなので削除した。

  • _pycache_
  • dist
  • build
  • test.spec

exeをダブルクリックして実行してみる。 実行できた。

以上、exeファイルの作成方法でした