Conda环境导入Fiona遇DLL加载失败,需兼容GDAL求解
Conda环境下Fiona导入失败(DLL加载错误)及GDAL兼容解决方案
问题情况
在Conda环境中导入Fiona或执行fio命令时,持续出现DLL加载失败错误,但通过virtualenv创建环境并使用pip安装Fiona后可正常运行。由于后续需同时使用仅能通过conda install -c conda-forge gdal安装的GDAL,需找到Conda环境下同时兼容两者的解决办法。
报错详情
导入Fiona时的错误回溯:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\Nick\anaconda3\envs\general\Lib\site-packages\fiona\__init__.py", line 41, in <module> from fiona._env import ( ImportError: DLL load failed while importing _env: The specified procedure could not be found.
测试验证
Conda环境测试(报错复现)
新建Conda环境并安装Fiona后,导入失败:
Nick@w11-virt-nh MINGW64 ~/Desktop/scratch $ conda create -n fionatest python fiona ...(省略安装过程) >>> import fiona Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\Nick\anaconda3\envs\fionatest\Lib\site-packages\fiona\__init__.py", line 41, in <module> from fiona._env import ( ImportError: DLL load failed while importing _env: The specified procedure could not be found. >>>
virtualenv环境测试(正常运行)
通过virtualenv创建环境并pip安装Fiona后,可正常导入:
Nick@w11-virt-nh MINGW64 ~/Desktop/scratch/ $ source test_venv/Scripts/activate ... >>> import fiona >>> fiona.__version__ '1.9.5' >>>
解决办法
统一从conda-forge安装所有依赖
新建Conda环境时,指定conda-forge频道安装Fiona和GDAL,避免跨频道依赖冲突:conda create -n gdal-fiona-env -c conda-forge python gdal fiona激活环境后直接测试导入,该方式能保证GDAL与Fiona的依赖版本完全匹配,避免DLL不兼容问题。
Conda环境中用pip安装适配版Fiona
- 先通过conda-forge安装GDAL:
conda create -n gdal-pip-fiona -c conda-forge python gdal conda activate gdal-pip-fiona - Windows环境下设置环境变量,让pip识别GDAL的头文件与库文件:
set GDAL_INCLUDE_DIR=%CONDA_PREFIX%\Library\include set GDAL_LIBRARY=%CONDA_PREFIX%\Library\lib\gdal_i.lib - 用pip安装Fiona,此时pip会基于当前Conda环境的GDAL版本编译适配的Fiona:
pip install fiona
- 先通过conda-forge安装GDAL:
清理环境冲突包
检查当前Conda环境中GDAL/Fiona的安装来源,避免跨频道包冲突:conda list --show-channel-urls若存在非conda-forge渠道的GDAL/Fiona,先卸载再重新从conda-forge安装:
conda remove gdal fiona conda install -c conda-forge gdal fiona
内容的提问来源于stack exchange,提问作者hadallen
相关产品推荐
相关产品推荐

