如何为Linux下Python3.9编译GDAL>=3.2.2 wheel并解决导入报错
报错原因
你当前编译出的GDAL wheel仅包含Python绑定代码,属于动态链接版本,依赖编译环境中安装的底层libgdal系统库,拿到未安装对应版本libgdal的离线机器上运行时,就会出现找不到libgdal.so.28的报错。
解决方案(二选一即可)
方案1:制作自包含wheel(推荐,适合私有PyPi分发)
使用auditwheel工具将依赖的底层系统库直接打包进wheel,目标机器无需额外安装系统依赖即可直接使用:
- 准备编译环境(编译环境的Linux发行版大版本、CPU架构必须和运行环境完全一致,避免glibc版本不兼容):
sudo add-apt-repository ppa:ubuntugis/ppa -y sudo apt update -y sudo apt install build-essential python3.9 python3.9-dev python3-pip libgdal-dev=3.2.2+dfsg-1~focal0 gdal-bin=3.2.2+dfsg-1~focal0 patchelf -y pip3 install wheel setuptools auditwheel
- 下载GDAL 3.2.2源码包解压后,修改配置:
sed -i '/gdal_config/c\gdal_config = /usr/bin/gdal-config' setup.cfg
- 编译初始wheel:
python3.9 setup.py bdist_wheel
- 修复wheel,打包所有依赖的底层库:
# x86_64架构Ubuntu20.04对应参数如下,其他环境按需调整plat参数:Ubuntu18.04用manylinux_2_27,ARM架构替换x86_64为aarch64 auditwheel repair dist/GDAL-3.2.2-cp39-cp39-linux_x86_64.whl --plat manylinux_2_31_x86_64 -w repaired_wheel/
修复后的wheel存放在repaired_wheel目录下,直接上传到私有PyPi即可,所有符合架构要求的Linux环境都可以直接pip安装使用。
方案2:配套部署系统依赖
如果不想修改wheel,可将编译环境中依赖的libgdal相关deb包一并传到离线环境安装:
- 联网环境下载所有依赖包:
sudo apt install --download-only libgdal28 gdal-bin -y
所有下载的deb包默认存放在/var/cache/apt/archives/目录下,将目录下所有deb文件和你编译的GDAL wheel一起传到离线环境。
2. 离线环境先安装系统依赖,再安装GDAL wheel:
sudo dpkg -i *.deb pip3 install GDAL-3.2.2-cp39-cp39-linux_x86_64.whl
内容的提问来源于stack exchange,提问作者Mickey Cohen
相关产品推荐
相关产品推荐

