GDAL导入DLL加载失败求助:Python环境与VS Code运行异常
GDAL导入DLL加载失败问题排查与解决建议
我已经花了一周时间解决GDAL导入时的DLL加载失败问题,试过各种方法都没用,以下是详细情况:
报错信息1:VS Code运行代码时的错误
Traceback (most recent call last): File "C:\Users\\anaconda3\envs\pygdal38\lib\site-packages\osgeo\__init__.py", line 29, in swig_import_helper return importlib.import_module(mname) File "C:\Users\\anaconda3\envs\pygdal38\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 657, in _load_unlocked File "<frozen importlib._bootstrap>", line 556, in module_from_spec File "<frozen importlib._bootstrap_external>", line 1166, in create_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed ImportError: DLL load failed while importing _gdal: 找不到指定的程序。 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:/Users//Desktop/Python/começando true color.py", line 8, in <module> from remap import remap # Import the Remap function File "c:\Users\\Desktop\Python\remap.py", line 6, in <module> from osgeo import gdal File "C:\Users\\anaconda3\envs\pygdal38\lib\site-packages\osgeo\__init__.py", line 45, in <module> _gdal = swig_import_helper() File "C:\Users\\anaconda3\envs\pygdal38\lib\site-packages\osgeo\__init__.py", line 41, in swig_import_helper raise ImportError(traceback_string + '\n' + msg) ImportError: Traceback (most recent call last): File "C:\Users\\anaconda3\envs\pygdal38\lib\site-packages\osgeo\__init__.py", line 29, in swig_import_helper return importlib.import_module(mname) File "C:\Users\\anaconda3\envs\pygdal38\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 657, in _load_unlocked File "<frozen importlib._bootstrap>", line 556, in module_from_spec File "<frozen importlib._bootstrap_external>", line 1166, in create_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed ImportError: DLL load failed while importing _gdal: 找不到指定的程序。 On Windows, with Python >= 3.8, DLLs are no longer imported from the PATH. If gdalXXX.dll is in the PATH, then set the USE_PATH_FOR_GDAL_PYTHON=YES environment variable to feed the PATH into os.add_dll_directory().
报错信息2:Anaconda命令行(Python 3.9.12)导入GDAL的错误
Python 3.9.12 (main, Apr 4 2022, 05:22:27) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from osgeo import gdal Traceback (most recent call last): File "C:\Users\\anaconda3\lib\site-packages\osgeo\__init__.py", line 29, in swig_import_helper return importlib.import_module(mname) File "C:\Users\\anaconda3\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 666, in _load_unlocked File "<frozen importlib._bootstrap>", line 565, in module_from_spec File "<frozen importlib._bootstrap_external>", line 1173, in create_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed ImportError: DLL load failed while importing _gdal: 找不到指定的模块。 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\ire0052\anaconda3\lib\site-packages\osgeo\__init__.py", line 45, in <module> _gdal = swig_import_helper() File "C:\Users\ire0052\anaconda3\lib\site-packages\osgeo\__init__.py", line 41, in swig_import_helper raise ImportError(traceback_string + '\n' + msg) ImportError: Traceback (most recent call last): File "C:\Users\ire0052\anaconda3\lib\site-packages\osgeo\__init__.py", line 29, in swig_import_helper return importlib.import_module(mname) File "C:\Users\ire0052\anaconda3\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 666, in _load_unlocked File "<frozen importlib._bootstrap>", line 565, in module_from_spec File "<frozen importlib._bootstrap_external>", line 1173, in create_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed ImportError: DLL load failed while importing _gdal: 找不到指定的模块。 On Windows, with Python >= 3.8, DLLs are no longer imported from the PATH. If gdalXXX.dll is in the PATH, then set the USE_PATH_FOR_GDAL_PYTHON=YES environment variable to feed the PATH into os.add_dll_directory().
已尝试的操作及结果
- 最初认为是GDAL本身问题,通过conda卸载重装多次,无效。
- 创建Python 3.8.13的新Anaconda环境,在命令行中导入GDAL无报错:
>>> from osgeo import gdal >>>
- 但在VS Code中运行目标代码时,同样的DLL加载错误再次出现。
解决建议
1. 确认VS Code使用的Python解释器
打开VS Code左下角的Python解释器选择器,确保选中的是你创建的Python 3.8.13 + GDAL的环境,而非默认的Python 3.9.12环境。
2. 设置环境变量USE_PATH_FOR_GDAL_PYTHON=YES
根据报错提示,Windows下Python 3.8+不再从PATH加载DLL,需设置环境变量:
- 临时设置:在VS Code终端执行
set USE_PATH_FOR_GDAL_PYTHON=YES,再运行代码。 - 永久设置:右键“此电脑”→属性→高级系统设置→环境变量,在用户/系统变量中添加
USE_PATH_FOR_GDAL_PYTHON,值设为YES,重启VS Code生效。
3. 手动添加GDAL DLL路径到Python的DLL目录
在代码开头添加以下代码(替换为你的GDAL DLL实际路径,比如C:\Users\<你的用户名>\anaconda3\envs\pygdal38\Library\bin):
import os os.add_dll_directory(r"C:\Users\<你的用户名>\anaconda3\envs\pygdal38\Library\bin") from osgeo import gdal
4. 确保GDAL与Python版本兼容
推荐通过conda-forge安装匹配Python 3.8.13的GDAL版本:
conda activate pygdal38 conda install -c conda-forge gdal
5. 清理VS Code缓存
关闭VS Code,备份后删除项目目录下.vscode文件夹中的settings.json,重新打开VS Code并选择正确解释器,再尝试运行代码。
内容的提问来源于stack exchange,提问作者Daniel_
相关产品推荐
相关产品推荐

