背景
Pythonファイルをコマンドプロンプト等から起動すると問題なく動いていた。
しかし、PyInstallerでExe化したファイルを実行すると、pyprojをインポートするところで、以下のエラーが送出され、プログラムが落ちてしまった。
ModuleNotFoundError: No module named 'pyproj.datadir'
環境
- Windows 10
- Python 3.7.4
- PyInstaller 3.6
- pyproj 2.4.0
対処法
specファイル内の、Analysis()のdatasにpyprojのパスを追加するとうまくいった。
.spec
a = Analysis(['hoge.py'],
pathex=['C:\\workspace\\hoge\\src'],
binaries=[],
datas=[
('C:\\Users\\grin\\Anaconda3\\envs\\py_37\\Lib\\site-packages\\pyproj\\*', '.\\pyproj\\'),
],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
追記(2020/08/04)
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\grin\AppData\Local\Temp\_MEI103442\skyfield\data\nutation.npz'
のようなFileNotFoundErrorが出た場合も、該当するファイルパスをdatasに追加すれば大丈夫です。
datas = [('C:\\Users\\grin\\Anaconda3\\envs\\py_37\\Lib\\site-packages\\skyfield\\data\\*', '.\\skyfield\\data\\'),],
参考URL
- https://github.com/pyproj4/pyproj/issues/273
- https://stackoverflow.com/questions/55824830/i-get-error-no-module-named-pyproj-datadir-after-i-made-py-to-exe-with-py
- https://pythonhosted.org/PyInstaller/spec-files.html
- https://stackoverflow.com/questions/57482672/filenotfounderror-errno-2-when-running-pyinstaller-executable