pyinstallerでEXE化した後の実行で起動できない問題の調べ方と、今回のケースでの解決法

windows10だと問題ないのに、windows8.1だと起動できないEXEが出来上がる。次のコマンドでexe化していたが、起動時にエラーが発生して起動できなかった。

pyinstaller -F -w   GUI_tkinter.py

問題の調べ方は exe化する時に -w オプションを外す、これで起動時にDOS窓が開き、エラーメッセージが表示される。リダイレクトしてエラーメッセージをファイル出力することもできる。

これでエラーメッセージを探したところ、問題はPANDASへのパスが通っていないようだ。エラーメッセージの概要は次の通り。

  File "site-packages\pandas\__init__.py", line 35, in <module>
ImportError: C extension: No module named 'pandas._libs.tslibs.np_datetime' not built. 

If you want to import pandas from the source directory, 
you may need to run
 'python setup.py build_ext --inplace --force' to build the C extensions first.

condaのpandasを入れなおしたり、pipで入れなおしたり、whlから入れなおしたり、やってみたが、変わらず。ぐぐると似たような問題で悩んでた人が自己レス解決法を書いてくれていた。記事はこちら。

この記事を参考に、.specファイルの中身を編集した。

def get_pandas_path():
    import pandas
    pandas_path = pandas.__path__[0]
    return pandas_path
dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"])
a.datas += dict_tree
a.binaries = filter(lambda x: 'pandas' not in x[0], a.binaries)

この2か所を追加して、exe化を.specファイル指定でやり直した。

pyinstaller GUI_tkinter.spec --onefile

これで無事、起動できるEXEができるようになった。但しDOS窓も一緒に開くので配布を行う場合は、-w オプションつけて、.specファイルを作り直す必要があるやもしれない。


チップはこちらからお願いします