aburi6800のブログ

コンピュータのプログラミング、ゲームに関するニッチな情報を書いていくブログです。

【Python】PyInstallerの警告に対する対処方法について

環境

発生した環境は以下。

発生事象

上記環境にて、pyxelpackagerでアプリケーションの単体実行ファイル生成時、以下警告が発生。
単体実行ファイルが作成されない。

12467 WARNING: Tcl modules directory /usr/share/tcltk/tcl8.6/../tcl8 does not exist.

原因

pyxelpackagerでは、引数(アセット、実行ファイル)を作成する処理のみを行い、PyInstallerに渡す。
単体実行ファイルを作成する処理はPyInstallerにて行われるが、このPyInstallerでのパスの指定がおかしい。
(tcl8ディレクトリはtcl8.6の下に存在しているが、その上の階層を参照しようとしている)

対処

~/.local/lib/python3.8/site-packages/PyInstaller/hooks/hook-_tkinter.py の 206行目に余計な引数が指定されているのを削除。

(修正前)

206    modules_path = os.path.join(tcl_root, "..", modules_dirname)

(修正後)

206     modules_path = os.path.join(tcl_root, modules_dirname)

その後、pyxelpackagerを実行すると、単体実行ファイルが作成された。

補足

venvで仮想環境を作成している場合、修正対象ファイル(hook-_tkinter.py)は以下に配置される。

./lib/python3.8/site-packages/PyInstaller/hooks/hook-_tkinter.py

なお、Macは手元に環境が無いため未確認だが、恐らく同様の原因だと思われる。