Pythonをpyinstallerでパッケージ化してEXEとして配布できるようにするときのメモ

スポンサーリンク

色々と引っかかるところが多かったので自分用に簡単にメモしておく。

スポンサーリンク

やり方

・Pythonと関連パッケージをインストールする。
パッケージインストールには以下を参考に、「Build Tools for Visual Studio」をインストールする必要がある。

Download Visual Studio 2019 for Windows & Mac
Download Visual Studio Community, Professional, and Enterprise. Try Visual Studio IDE, Code or Mac for free today.
「pip install」で「error: Microsoft Visual C++ 14.0」が出てインストールできない
WindowsでPythonのpipでインストールできない事象が発生。「pip install ccxt」としたところ以下のエラー。ほかのパッケージでも同様。・エラーRunning setup.py install for p...

 

pyinstaller – Pythonプログラムをスタンドアロンの実行可能ファイルにフリーズする(パッケージ化する) – GitHubじゃ!Pythonじゃ!

 

・pyinstallerでexe化する

【Python】【Flask】オブジェクトでテスト環境と本番環境の設定を分ける|MAX999blog
オブジェクトを使ってローカル環境、テスト環境、本番環境等の設定を使い分ける方法。 環境の設定方法としては、設定ファイルを
pyinstaller – Pythonプログラムをスタンドアロンの実行可能ファイルにフリーズする(パッケージ化する) – GitHubじゃ!Pythonじゃ!
【Python】ファイルをexe化する方法【pyinstaller】 – DUKADUKA

 

以下のように「onefile」オプションをつけて作成しないと単独で実行できるようにならない。
pyinstaller sample.py –onefile

・Configファイルが必要な場合は、以下を参照に設定するか、
スクリプト中で読み込ませる。

【ファイル参照】pyinstaller configファイルの読み込み|システムブック
pyinstaller configファイルの読み込み pyinstallerは基本的に設定しない限り外部ファイルを読み

 

しかし、起動した場合はユーザのデフォルトパスがカレントディレクトリになるので注意
以下を参考に、カレントディレクトリをスクリプト中で移動しておくことも必要。

Pythonでカレントディレクトリを取得、変更(移動) | note.nkmk.me
Pythonが実行されている作業ディレクトリ(カレントディレクトリ)を取得し確認、変更(移動)する方法を説明する。osモジュールを使う。標準ライブラリに含まれているので追加のインストールは必要ない。16.1. os — 雑多なオペレーティングシステムインタフェース — Python 3.6.5 ドキュメント 取得、変更...
Pythonで実行中のファイルの場所(パス)を取得する__file__ | note.nkmk.me
Pythonで実行中のスクリプトファイル.pyの場所(パス)を取得するには__file__を使う。実行中のファイルの場所を基準にほかのファイルを読み込んだりする場合に便利。Python3.8までは、__file__で得られるのはpythonコマンド(環境によってはpython3コマンド)の実行時に指定したパス。相対パス...
[Python] スクリプト実行ディレクトリを絶対パスで取得する - Qiita
ずばり、以下で取得可能。 os.path.dirname(os.path.abspath(__file__)) 動作確認用のテストコード get_abs_dirname.py import os print("__file...

例:
os.chdir(os.path.dirname(os.path.abspath(file)))

しかしこれはEXEでは動かず。
https://qiita.com/q_masa/items/93872744f63ed97a54d8
とのこと。

結局Batでカレントディレクトリを移動して、それ経由で起動してやるしかない。

ちょっと取り扱いに注意が必要だと感じた。

スポンサーリンク
Python 技術的なこと
Heywaをフォローする
Awesomeのある日々を求めて

コメント

タイトルとURLをコピーしました