Mac端PyCharm调用GDAL打开TIFF触发SIGSEGV错误如何解决
问题原因
该问题本质是Mac端GUI应用的环境变量继承限制导致的动态库加载冲突:
- Mac的系统完整性保护(SIP)机制会拦截
DYLD_LIBRARY_PATH等动态库加载相关的环境变量在GUI应用中的继承,你在终端中配置的libtiff、GDAL相关路径不会被从Dock/Launchpad启动的PyCharm读取 - PyCharm运行时优先加载了和GDAL 3.3.3版本不兼容的libtiff库(比如Mac系统自带的低版本libtiff),解析WorldPop等数据TIFF中带的GDAL自定义元数据标签(42112、42113)时出现异常,最终触发段错误SIGSEGV
- 终端直接运行脚本、Windows端PyCharm运行无异常,就是因为这两个场景下都能正确加载你安装的匹配版本的libtiff 4.3.0
解决方案
按优先级从高到低尝试以下操作即可:
修改PyCharm运行配置的环境变量
打开对应脚本的「运行/调试配置」面板,找到「环境变量」设置项,新增2个变量:- 先在终端执行
gdal-config --datadir拿到GDAL数据目录路径,新增变量GDAL_DATA,值填上面拿到的路径 - 再在终端执行
otool -L $(python -c "from osgeo import _gdal; print(_gdal.__file__)"),找到输出中libtiff的加载目录,新增变量DYLD_LIBRARY_PATH,值填该libtiff目录路径,多路径用冒号分隔
保存配置后重新运行脚本即可。
- 先在终端执行
终端启动PyCharm继承环境变量
不要从桌面入口启动PyCharm,直接打开终端执行open /Applications/PyCharm.app(如果是社区版路径对应改为/Applications/PyCharm CE.app),启动后再运行脚本,此时PyCharm会完整继承终端的所有环境配置,和终端直接运行的环境完全一致。升级PyCharm版本
2022.1及以上版本的PyCharm已修复Mac端环境变量继承的已知问题,升级后也可直接解决该类冲突。
内容的提问来源于stack exchange,提问作者nikojpapa
相关产品推荐
相关产品推荐

