简介:这份文档面向在 Win7 64 位环境下使用 Python 2.7 的开发者,聚焦 GDAL 地理空间库的安装与配置难题,适合刚接触 GIS 开发、需要在旧版 Windows 平台搭建 Python 空间数据处理环境的技术人员参考。资源包内仅含 1 个 docx 文档,体积约 95KB,以文字记录为主,便于快速查阅与本地留存。文档围绕 GDAL 1.9.2 与 Python 2.7 的搭配展开,梳理了 Visual Studio 2010、GEOS 3.3.8 等依赖项的安装顺序,并对比了自行编译 swig/python 与直接安装官方 msi 两种方案,同时给出 swig.exe 缺失、Vcvarsall.bat 找不到、DLL load failed 等典型报错的排查思路与环境变量配置要点。目前已有 627 人学习下载,适合希望少走弯路、快速完成 GDAL 环境搭建的读者参考借鉴。
1. 为什么 Win7 64 位 + Python2.7 装 GDAL 至今仍是高频翻车现场
如果你手上有一台还在跑 Win7 64 位的工控机、老测绘笔记本,或者某个只认 Python2.7 的遗留遥感脚本,那你大概率会在装 GDAL 这一步卡住。GDAL 不是纯 Python 包,它底层是 C/C++ 编译出来的动态库,Python 这边只是一个绑定壳。pip 直接装会去编译源码,而 Win7 上没有现成的编译环境,于是报错、缺 DLL、版本对不上轮番上阵。更麻烦的是 Python2.7 已经停止维护,很多新版的 GDAL wheel 根本不再提供 cp27 的包,你得去找历史版本,还得保证位数、编译器、numpy 版本全部对齐。这篇笔记就是把我自己在几台 Win7 64 位机器上反复装 GDAL 的路径拆开讲清楚:从判断该用哪种安装方式,到具体命令、环境变量、DLL 排查,再到装完之后怎么验证。目标很直接——让你少走我当年走过的弯路,一次把环境跑通。
2. 先搞清楚 GDAL 在 Windows 上到底怎么装才不翻车
2.1 三种安装路径的适用边界
在 Win7 64 位 + Python2.7 这个组合下,装 GDAL 常见有三条路,选错了后面全是坑。
第一条是 pip 源码编译。执行pip install GDAL时,pip 会下载源码包并尝试用本机的 C++ 编译器编译。Win7 上如果没有装 Visual Studio 2008 或对应的 Windows SDK,这一步直接失败,报错通常是Unable to find vcvarsall.bat。即便装了编译器,GDAL 依赖的 PROJ、GEOS 等库也要手动配好,对只想跑脚本的人来说成本太高。这条路我不推荐。
第二条是找第三方预编译的 wheel 文件。这是 Win7 + Python2.7 最现实的做法。wheel 里已经包含了编译好的_gdal.pyd和配套 DLL,pip 只负责解压安装,不触发编译。关键在于 wheel 的命名要和你本机环境严格匹配,比如GDAL-2.4.4-cp27-cp27m-win_amd64.whl,其中cp27表示 CPython2.7,win_amd64表示 64 位 Windows。位数不对、Python 小版本不对,装了也 import 不了。
第三条是用 conda 安装。如果你的机器上装了 Anaconda 或 Miniconda,conda install gdal会自动解决依赖。但 Win7 上较新的 conda 版本可能已经不支持,需要退到老版本。而且 conda 环境里的 Python 版本要和你脚本要求的一致,否则会出现“命令行能 import、IDE 里不能”的玄学问题。
我一般会先确认两件事:Python 是不是 64 位,以及 pip 能不能正常联网。确认命令后面会讲。只要这两点没问题,就走 wheel 路线。
2.2 确认你的 Python 位数和 pip 状态
动手之前先把环境摸清楚,别急着下载。打开 cmd,依次执行:
python -c "import struct; print(struct.calcsize('P') * 8)"这行代码输出64说明是 64 位 Python,输出32就是 32 位。Win7 64 位系统上完全可以装 32 位 Python,所以这一步必须确认,不能想当然。
接着看 pip 版本和 Python 版本:
python --version pip --versionpython --version应该输出Python 2.7.x。pip --version会显示 pip 版本以及它关联的 Python 路径,确认这个路径就是你打算装 GDAL 的那个 Python。如果机器上有多个 Python,很容易装到另一个环境里去,后面 import 报ImportError就是这里埋的雷。
提示:如果 pip 版本太老,先升级 pip 本身。Python2.7 对应的 pip 最高一般停在 20.x,执行
python -m pip install --upgrade "pip<21"即可,不要强行装新版 pip,会不兼容。
2.3 找到匹配 cp27 的 GDAL wheel
wheel 文件的核心是命名规则。以GDAL-2.4.4-cp27-cp27m-win_amd64.whl为例,拆开看:
| 字段 | 含义 | 你必须匹配的点 |
|---|---|---|
| GDAL-2.4.4 | 包名和版本 | 按脚本需求选,别盲目追新 |
| cp27 | CPython 2.7 | 必须和你的 Python 主版本一致 |
| cp27m | ABI 标签 | Python2.7 一般是 cp27m |
| win_amd64 | 平台 | 64 位 Python 用这个,32 位用 win32 |
选版本时有个血泪经验:不是越新越好。GDAL 2.4.x 对 Python2.7 的支持比较完整,再往上的版本很多只发 cp36 以上的 wheel。如果你脚本里用了osgeo的老接口,还要注意 GDAL 大版本变化带来的 API 差异。我一般会先看脚本里from osgeo import gdal之后调了哪些方法,再决定装 2.3 还是 2.4。
下载 wheel 时注意别下成源码包.tar.gz,那个装起来就是前面说的编译路线。文件下好后放到一个路径简单、没有中文和空格的目录,比如D:\gdal_whl\,路径里有中文有时会让 pip 解析出问题。
2.4 用 pip 安装 wheel 并验证 import
进入 wheel 所在目录,执行安装:
cd /d D:\gdal_whl pip install GDAL-2.4.4-cp27-cp27m-win_amd64.whlcd /d是 Windows 下切换盘符和目录的写法,不加/d切不到 D 盘。安装过程如果顺利,最后会显示Successfully installed GDAL-2.4.4。
装完立刻验证,别等到跑脚本时才发现问题:
# verify_gdal.py from osgeo import gdal print(gdal.__version__) dataset = gdal.Open("test.tif") if dataset is None: print("open failed") else: print(dataset.RasterXSize, dataset.RasterYSize)这段代码先打印 GDAL 版本,再尝试打开一个测试影像。gdal.Open返回None表示打开失败,可能是文件路径不对或格式不支持,但至少说明 GDAL 本身已经能 import。如果第一行from osgeo import gdal就报错,那问题出在安装环节,继续往下看排查章节。
参数说明:gdal.Open的第一个参数是文件路径,Win7 下建议用原始字符串或正斜杠,避免反斜杠被当转义符。RasterXSize和RasterYSize是影像的宽高像素数,能打印出来就说明数据驱动正常加载了。
3. 环境变量与 DLL 依赖:装完 import 报错的根因排查
3.1 PATH 里到底该加哪些目录
wheel 安装后,_gdal.pyd和一堆 DLL 会被放到site-packages\osgeo目录下。Python 在 import 时会去这个目录找_gdal.pyd,但_gdal.pyd本身还依赖同目录下的其他 DLL,比如gdal204.dll。如果这些 DLL 不在系统搜索路径里,就会报DLL load failed。
常见做法是把osgeo目录加到系统 PATH。假设你的 Python 装在C:\Python27,那目录就是:
C:\Python27\Lib\site-packages\osgeo加到 PATH 后需要重开 cmd 才生效。验证方法是:
echo %PATH%看输出里有没有包含 osgeo 路径。注意 PATH 里不要有重复项,也不要塞太多无关路径,Win7 的 PATH 长度有限制,超了会截断,反而引发更奇怪的问题。
3.2 用 Dependency Walker 定位缺失的 DLL
如果加了 PATH 还是报 DLL 加载失败,就需要看看到底缺哪个。老牌工具 Dependency Walker 可以打开_gdal.pyd,它会列出所有依赖的 DLL,缺失的会用红色标出。Win7 上常见的缺失项是MSVCR90.dll、MSVCP90.dll这类 VC 运行库。
解决办法是装对应的 Visual C++ Redistributable。Python2.7 本身是用 VS2008 编译的,所以需要 VC++ 2008 运行库。注意 64 位 Python 要装 64 位的运行库,装成 32 位的不起作用。这个运行库在微软官网能下到,装完重启一次再试。
注意:不要随便从网上单独下载某个 DLL 丢到 system32 里,版本不匹配会导致更严重的系统问题。优先用官方运行库安装包。
3.3 numpy 版本冲突导致的隐性失败
GDAL 的 Python 绑定在部分功能上依赖 numpy,尤其是读写栅格为数组时。如果 numpy 版本和 GDAL wheel 编译时用的版本差异太大,可能在 import 阶段就报错,错误信息往往很隐晦,比如ImportError: numpy.core.multiarray failed to import。
Python2.7 对应的 numpy 最后稳定版本大概在 1.16.x。我一般会先固定 numpy:
pip install "numpy==1.16.6"然后再装 GDAL wheel。顺序很重要,先 numpy 后 GDAL,因为 GDAL 安装时可能会检查 numpy 是否存在。如果先装了 GDAL 再降 numpy,有时需要重装 GDAL 才能重新链接。
3.4 一个最小可复现的验证脚本
把前面的验证脚本再补全一点,加上数组读取,能同时验证 GDAL 和 numpy 的配合:
# verify_gdal_numpy.py from osgeo import gdal import numpy as np ds = gdal.Open("test.tif") band = ds.GetRasterBand(1) arr = band.ReadAsArray() print("shape:", arr.shape) print("dtype:", arr.dtype) print("mean:", np.mean(arr))GetRasterBand(1)取第一个波段,ReadAsArray()把波段读成 numpy 数组。如果这一步能打印出 shape 和均值,说明 GDAL、DLL、numpy 三者都正常。arr.shape是(行数,列数),dtype常见是uint8或uint16,取决于影像位深。均值能算出来说明 numpy 运算也通了。
4. 避坑指南:Win7 64 位装 GDAL 最常见的 5 个翻车点
4.1 现象:pip 报 “is not a supported wheel on this platform”
原因:wheel 文件名里的平台标签和本机 Python 不匹配。最常见的是 32 位 Python 装了win_amd64的包,或者 Python 是 2.7.9 而 wheel 要求 cp27m 但实际 ABI 有差异。
解决:先用 2.2 节的命令确认位数,再核对 wheel 文件名。如果位数对但还是报错,执行pip debug --verbose(老版本 pip 可能不支持)或直接看python -c "import pip; print(pip.pep425tags.get_supported())",把支持的标签和 wheel 文件名逐段比对。
4.2 现象:import osgeo 报 “DLL load failed: 找不到指定的模块”
原因:_gdal.pyd依赖的某个 DLL 不在搜索路径里,或者 VC 运行库缺失。
解决:先加 osgeo 目录到 PATH,重开 cmd。还不行就用 Dependency Walker 看缺哪个 DLL,补装 VC++ 2008 运行库。注意 64 位和 32 位运行库不能混装。
4.3 现象:装完 GDAL 后 numpy 报错,或反过来
原因:numpy 和 GDAL 的编译版本不匹配,或者安装顺序导致链接错误。
解决:先卸掉两个包,按“先 numpy 后 GDAL”的顺序重装,numpy 固定在 1.16.6 附近。卸载命令是pip uninstall GDAL numpy,然后重新执行安装。
4.4 现象:命令行能 import,PyCharm 或 IDE 里不能
原因:IDE 用的解释器和你命令行里的不是同一个,或者 IDE 没有继承系统 PATH。
解决:在 IDE 的项目设置里确认解释器路径,指向你装 GDAL 的那个 python.exe。如果 IDE 有自己的环境变量配置,把 osgeo 目录也加进去。最省事的办法是直接在 IDE 的终端里跑一遍验证脚本,看报错是否一致。
4.5 现象:gdal.Open 返回 None,但 import 正常
原因:这不是安装问题,是数据或路径问题。可能是文件路径含中文、文件被占用、或者格式驱动没加载。
解决:先用绝对路径和英文文件名测试。如果还不行,用gdal.GetDriverCount()看驱动数量,正常应该有几十个。驱动数为 0 说明 GDAL 数据目录没配好,需要设置GDAL_DATA环境变量指向site-packages\osgeo\data\gdal。
5. 装好之后怎么确认真的能用:三个进阶验证技巧
5.1 用 gdalinfo 命令行工具做交叉验证
wheel 安装通常会带gdalinfo.exe,在site-packages\osgeo目录下。直接命令行调用:
C:\Python27\Lib\site-packages\osgeo\gdalinfo.exe test.tif如果这个工具能输出影像的坐标系、波段数、范围等信息,说明 GDAL 的 C 层完全正常。Python 层再出问题,就只可能是绑定或环境变量的事。这个交叉验证能帮你快速缩小排查范围。
5.2 检查 GDAL_DATA 和 PROJ_LIB 是否生效
GDAL 处理投影转换时需要数据文件,这些文件在osgeo\data\gdal和osgeo\data\proj下。如果环境变量没指对,做坐标转换时会报“无法找到 proj.db”之类的错误。验证方法:
from osgeo import osr sr = osr.SpatialReference() sr.ImportFromEPSG(4326) print(sr.ExportToWkt())ImportFromEPSG(4326)会去读 proj 数据。能打印出 WKT 字符串就说明数据路径没问题。如果报错,就手动设置:
set GDAL_DATA=C:\Python27\Lib\site-packages\osgeo\data\gdal set PROJ_LIB=C:\Python27\Lib\site-packages\osgeo\data\proj这两个变量建议写进系统环境变量,别每次开 cmd 都设一遍。
5.3 把安装过程固化成可重复的脚本
Win7 机器往往不止一台,每次手动装容易漏步骤。我习惯把整个流程写成一个 bat 脚本:
@echo off REM install_gdal.bat set PYTHON_DIR=C:\Python27 set WHL_DIR=D:\gdal_whl set OSGEO_DIR=%PYTHON_DIR%\Lib\site-packages\osgeo %PYTHON_DIR%\python.exe -m pip install "numpy==1.16.6" %PYTHON_DIR%\python.exe -m pip install %WHL_DIR%\GDAL-2.4.4-cp27-cp27m-win_amd64.whl setx PATH "%PATH%;%OSGEO_DIR%" /M setx GDAL_DATA "%OSGEO_DIR%\data\gdal" /M setx PROJ_LIB "%OSGEO_DIR%\data\proj" /M echo done, please reopen cmd pausesetx是写系统环境变量的命令,/M表示系统级而不是用户级,需要管理员权限运行。脚本跑完必须重开 cmd 才生效。这个脚本我用了很多次,唯一要注意的是%PATH%在 setx 里会被展开成当前值,如果 PATH 已经很长,可能触发长度限制。遇到这种情况就手动去系统属性里加,别硬用脚本。
最后说个我自己的习惯:每次装完 GDAL,我都会把 wheel 文件、验证脚本、bat 安装脚本一起打包放到一个固定目录,命名带上日期和版本号。Win7 这种老环境,过半年再回来维护时,你根本记不住当时装的是哪个版本、PATH 怎么配的。留一份可复现的记录,比事后翻聊天记录靠谱得多。希望帮到你。
本文还有配套的精品资源,点击获取