0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PyInstallerについての調査

Last updated at Posted at 2021-01-20

PyInstallerを使うと、Pythonで作ったプログラムを実行ファイルに変換できるので、とても便利です。しかも、以下のような感じで書くと、ライブラリも全部まとめて一つのファイルになります。かなり便利。

test.pyをtest.exeに変換する方法:

$ pyinstaller test.py --onefile

PyInstallerのインストール

以下のようにpipを使って、PyInstallerをインストールできます。

$ pip install pyinstaller

エラーが出る場合 - PythonバージョンやmacOS

macOSや新しいPythonのバージョンの対応は遅れています。対応バージョンを使いましょう。

エラーが出る場合 - 暗黙的なインポート

暗黙的なインポートがある場合、エラーが出ます。以下のように、『--hidden-import=パッケージ名』を追記することで暗黙的なモジュールも追記します。

$ pyinstaller -F --hidden-import="sklearn.utils._cython_blas" --hidden-import="sklearn.neighbors.typedefs" --hidden-import="sklearn.neighbors.quad_tree" --hidden-import="sklearn.tree._utils" test.py

また、プログラム内に「import xxx」と暗黙的なモジュールを記載しておくこともできます。

EXE化すると __file__ や __dir__ は使えない

そこで、exeファイルのパスはsys.argv[0]で取得します。

test.py
import os, sys
exe = os.path.abspath(sys.argv[0])
exe_dir = os.path.dirname(exe)

--onefile オプションをつけると起動が遅くなる

なお、--onefile オプションをつけてEXE化すると、一つのファイルを配布するだけですむので便利だが、その分、起動が遅くなります。起動時にファイルを展開してから実行するため。

どのくらい遅くなるのかベンチマーク。
コマンドラインに渡した文字列を表示するだけのプログラムを5回実行してみたところ、以下のようになりました。

| オプション | 経過秒数 |
|-----------+---------|
| --onefile | 1.44sec |
| なし | 0.74sec |

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?