Python 3.9环境下geoh5py与rasterio兼容性问题求助
解决Python 3.9中geoh5py与rasterio的兼容性冲突问题
问题现象
在Python 3.9环境下,单独导入geoh5py或rasterio均能正常运行,但同时导入两个库时,无论导入顺序如何都会触发DLL加载失败的错误:
- 先导入
rasterio再导入geoh5py时,执行代码:
报错信息:import rasterio import geoh5pyfrom rasterio._base import gdal_version ImportError: DLL load failed while importing _base: The specified procedure could not be found. - 先导入
geoh5py再调用其模块时,执行代码:
报错信息:from geoh5py.workspace import Workspacefrom . import _errors ImportError: DLL load failed while importing _errors: The specified procedure could not be found.
问题根源
这两个库依赖的GDAL(Geospatial Data Abstraction Library)版本不一致,其中一个库加载后会覆盖另一个库所需的GDAL相关DLL文件,导致后续加载时找不到指定的函数接口。
解决方案
1. 用虚拟环境隔离依赖
创建两个独立的虚拟环境,分别承载geoh5py和rasterio的依赖,避免版本冲突:
- 创建并激活geoh5py专属环境:
python -m venv geoh5py_env geoh5py_env\Scripts\activate # Windows系统 # source geoh5py_env/bin/activate # Linux/macOS系统 pip install geoh5py - 创建并激活rasterio专属环境:
python -m venv rasterio_env rasterio_env\Scripts\activate # Windows系统 # source rasterio_env/bin/activate # Linux/macOS系统 pip install rasterio
2. 安装兼容版本的GDAL及关联库
先确认两个库对GDAL的版本要求,再安装共同兼容的版本:
- 查看两个库的依赖信息:
pip show geoh5py pip show rasterio - 根据输出的版本范围,选择一个双方都兼容的GDAL版本(比如
3.4.3),手动指定安装:pip install gdal==3.4.3 pip install rasterio --no-binary rasterio pip install geoh5py
3. 进程隔离执行代码
如果必须在同一环境中运行,可通过启动子进程分别执行依赖不同库的代码,避免DLL冲突:
import subprocess import sys # 执行geoh5py相关逻辑 geoh5py_task = """ from geoh5py.workspace import Workspace # 此处编写你的geoh5py业务代码 print("geoh5py模块运行正常") """ subprocess.run([sys.executable, "-c", geoh5py_task]) # 执行rasterio相关逻辑 rasterio_task = """ import rasterio # 此处编写你的rasterio业务代码 print("rasterio模块运行正常") """ subprocess.run([sys.executable, "-c", rasterio_task])
内容的提问来源于stack exchange,提问作者Barry
相关产品推荐
相关产品推荐

