使用PyInstaller打包osmnx程序出现fiona循环导入错误如何解决
OSMnx程序PyInstaller打包Fiona循环导入报错解决方案
该报错并非代码本身存在循环导入,而是PyInstaller打包时未正确识别Fiona模块的隐藏依赖、模块初始化顺序异常导致的,可按以下步骤解决:
- 第一步:调整主程序导入顺序,在最顶部优先导入Fiona相关模块,修改后的
myprogram.py代码如下:
# 提前预加载Fiona模块,修正初始化顺序 import fiona from fiona import _loading import geopandas # 原有业务代码 import osmnx as ox G = ox.graph_from_place('Cardiff, UK', network_type='drive') ox.plot_graph(G)
- 第二步:使用带隐藏导入参数的打包命令,显式告知PyInstaller打包遗漏的依赖:
pyinstaller --onefile --hidden-import fiona --hidden-import fiona._loading --hidden-import geopandas --hidden-import osmnx --hidden-import matplotlib myprogram.py - 第三步:若上述操作仍报错,可通过spec配置文件打包:
- 先运行一次基础打包命令生成
myprogram.spec配置文件 - 打开spec文件,将
hiddenimports字段修改为以下内容:
hiddenimports=[ 'fiona', 'fiona._loading', 'fiona.schema', 'geopandas', 'osmnx', 'matplotlib.backends.backend_qt5agg' ]- 执行命令
pyinstaller myprogram.spec重新生成可执行文件即可
- 先运行一次基础打包命令生成
- 附加兼容性说明:推荐使用Fiona 1.8.x版本进行打包,1.9+部分版本与PyInstaller适配存在已知问题,可执行
pip install fiona==1.8.22降级后再打包。若运行exe时提示缺少dll文件,可将Python环境site-packages/fiona目录下的所有dll文件复制到exe同级目录即可。
内容的提问来源于stack exchange,提问作者Rhyd Lewis
相关产品推荐
相关产品推荐

