Anaconda中用PyInstaller打包含Rasterio程序时模块缺失错误排查
错误原因及解决方法
错误原因
PyInstaller靠静态扫描代码识别需要打包的模块,但rasterio.sample这类子模块要么是代码里动态导入的,要么是rasterio的内部结构导致PyInstaller没自动检测到,所以打包后的程序运行时找不到这个模块。
解决方法
1. 打包时直接添加隐藏导入参数
重新执行PyInstaller命令,手动指定要打包的隐藏模块,命令如下:
pyinstaller --onefile --hidden-import rasterio.sample Crop_Script.py
如果后续还出现其他ModuleNotFoundError,直接在--hidden-import后追加对应的模块名即可,多个模块用空格分隔。
2. 修改.spec文件(适合多次打包场景)
先生成打包配置文件:
pyinstaller --onefile Crop_Script.py
打开生成的Crop_Script.spec,找到hiddenimports字段,把缺失的模块添加进去:
hiddenimports=['rasterio.sample'],
如果还有其他缺失模块,直接在列表里追加。之后用这个配置文件重新打包:
pyinstaller Crop_Script.spec
3. macOS环境额外处理
rasterio依赖GDAL等系统级动态库,macOS上打包后可能出现这类库找不到的问题,可尝试:
- 用
--add-binary参数手动添加GDAL库路径,命令示例:
pyinstaller --onefile --hidden-import rasterio.sample --add-binary "$CONDA_PREFIX/lib/libgdal.dylib:." Crop_Script.py
- 打包前用
otool -L $(which rasterio)检查rasterio的依赖库路径,确保这些路径下的文件能被PyInstaller正确捕获。
内容的提问来源于stack exchange,提问作者Patstro
相关产品推荐
相关产品推荐

