解决:ImportError: No module named 'pyproj.datadir'

在使用pyinstaller打包含有pyproj的程序时,可能出现错误:ImportError: No module named 'pyproj.datadir'。

这是由于pyproj是基于cython的,而pyinstaller在处理cython写的程序时不能知道pyx文件中有没有引入python模块: “PyInstaller can not determine if the Cython C object module is importing some Python module”。这是需要在setup.spec文件的hiddenimports加入缺少的模块。

查看pyproj源码,在pyproj/pyproj/_datadir.pyx中有:

import os

from libc.stdlib cimport malloc, free

from pyproj.compat import cstrencode, pystrdecode
from pyproj.datadir import get_data_dir
from pyproj.exceptions import ProjError, DataDirError

即cython模块_datadir.pyx中引入了python模块。

解决方法:hiddenimports加入pyproj.datadir,即

a = Analysis(['test.py'],
             pathex=[],
             binaries=[],
             hiddenimports=['pyproj.datadir',],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)

 

你可能感兴趣的:(python)