 环境安装完整指南)
从零开始在ARM架构设备上搭建OSMnx地理数据处理环境踩坑实录与完整解决方案 前言最近在做一个项目需要在NVIDIA Jetson设备上使用OSMnxOpenStreetMap eXtraction库来获取道路数据。本以为只是一个简单的pip install结果却踩了一连串的坑折腾了整整一天。特此记录希望能帮助到同样在aarch64架构上折腾OSMnx的朋友。环境信息项目详情设备NVIDIA Jetson (aarch64架构)操作系统Ubuntu 20.04 LTSPython版本3.8目标库OSMnx 1.6.0用途电单车方向判断 / 道路数据获取 第一关Fiona安装失败 - 缺少GDAL问题现象执行pip install osmnx时出现以下错误nvidiapc:~$ pip install osmnx Collecting osmnx Downloading osmnx-1.9.4-py3-none-any.whl (107 kB) Collecting fiona1.8.19 Downloading fiona-1.10.1.tar.gz (444 kB) Installing build dependencies ... done Getting requirements to build wheel ... error ERROR: Command errored out with exit status 1: command: /usr/bin/python3 /tmp/tmpl1okb5v0 get_requires_for_build_wheel /tmp/tmpkafq2rqa cwd: /tmp/pip-install-a4qf_y58/fiona Complete output (2 lines): WARNING:root:Failed to get options via gdal-config: [Errno 2] No such file or directory: gdal-config CRITICAL:root:A GDAL API version must be specified.原因分析fiona是geopandas的核心依赖用于读写地理空间数据。它在安装时需要编译C扩展因此必须依赖系统的GDALGeospatial Data Abstraction Library开发库。系统默认没有安装GDAL导致编译失败。解决方案安装GDAL开发库及Python绑定# 更新包列表 sudo apt update # 安装GDAL及相关开发库 sudo apt install gdal-bin libgdal-dev python3-gdal # 设置环境变量指定gdal-config路径 export GDAL_CONFIG/usr/bin/gdal-config # 重新尝试安装 pip install osmnx经验总结关键点pip install某些地理信息库时需要先安装系统级依赖。对于地理空间相关的Python库fiona、shapely、pyproj、rasterio等通常需要提前安装GDAL、GEOS、PROJ等底层库。 第二关GDAL版本不兼容问题现象安装完GDAL后再次尝试出现了新错误nvidiapc:~$ export GDAL_CONFIG/usr/bin/gdal-config nvidiapc:~$ pip install osmnx Collecting fiona1.8.19 Using cached fiona-1.10.1.tar.gz (444 kB) Installing build dependencies ... done Getting requirements to build wheel ... error ERROR: Command errored out with exit status 1: Complete output (1 lines): ERROR: GDAL 3.1 is required for fiona. Please upgrade GDAL.原因分析检查GDAL版本nvidiapc:~$ gdal-config --version 3.0.4Ubuntu 20.04 默认仓库中的GDAL版本是3.0.4但fiona 1.9.0要求GDAL 3.1。Fiona版本要求的GDAL版本1.8.xGDAL 2.01.9.x - 1.10.xGDAL 3.12.0GDAL 3.1解决方案分析面对版本不兼容通常有四种解决思路方案A升级GDAL到3.1推荐但可能不适用# 添加UbuntuGIS PPA获取新版GDAL sudo add-apt-repository ppa:ubuntugis/ppa sudo apt update sudo apt install gdal-bin libgdal-dev python3-gdal # 验证版本 gdal-config --version⚠️注意UbuntuGIS PPA 主要提供x86_64架构的包对于aarch64架构如Jetson可能不提供预编译包。如果PPA不支持需要从源码编译GDAL。方案B从源码编译GDAL 3.1通用但耗时# 安装编译依赖 sudo apt install build-essential cmake python3-dev \ libsqlite3-dev libcurl4-gnutls-dev libtiff-dev \ libgeos-dev libproj-dev libxml2-dev libexpat-dev # 下载GDAL源码 cd /tmp wget https://github.com/OSGeo/gdal/releases/download/v3.9.3/gdal-3.9.3.tar.gz tar -xzf gdal-3.9.3.tar.gz cd gdal-3.9.3 # 配置编译选项 ./configure --with-python --prefix/usr/local # 编译安装利用多核加速 make -j$(nproc) sudo make install sudo ldconfig # 设置环境变量 export GDAL_CONFIG/usr/local/bin/gdal-config export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH方案C使用旧版Fiona 旧版OSMnx快速有效✅# 清理缓存 pip cache purge # 安装支持GDAL 3.0的旧版本 pip install fiona1.8.22 pip install osmnx1.6.0方案D使用Conda管理依赖最省心✅# 安装Minicondaaarch64版本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh bash Miniconda3-latest-Linux-aarch64.sh # 创建独立环境 conda create -n osmnx python3.9 conda activate osmnx # Conda会自动处理所有依赖 conda install -c conda-forge osmnx我的选择由于Jetson是aarch64架构PPA没有提供合适的包源码编译又比较耗时。我选择了方案C使用旧版本成功解决了问题# 最终成功的安装命令 pip install fiona1.8.22 pip install osmnx1.6.0 # 验证安装 python3 -c import osmnx as ox; print(fOSMnx {ox.__version__}) # 输出: OSMnx 1.6.0经验总结依赖版本矩阵环境OSMnx版本Fiona版本GDAL版本最新环境1.9.41.10.1≥ 3.1兼容环境1.6.01.8.22≥ 2.0在aarch64架构上如果不想折腾编译降级策略往往是最快的解决方案。️ 最终稳定环境经过反复测试以下环境组合运行稳定系统环境# 操作系统 Ubuntu 20.04 LTS (focal) # 架构 aarch64 (ARMv8) # Python Python 3.8.10Python包版本osmnx1.6.0 fiona1.8.22 geopandas0.13.2 networkx3.1 shapely2.0.7 pyproj3.5.0 pandas2.0.3 numpy1.24.4 requests2.32.4验证脚本# test_osmnx.py import osmnx as ox import fiona import geopandas as gpd print(fOSMnx version: {ox.__version__}) print(fFiona version: {fiona.__version__}) print(fGeopandas version: {gpd.__version__}) # 测试道路数据下载深圳地区 print(\nTesting road data download...) G ox.graph_from_place(Shenzhen, China, network_typedrive, simplifyTrue) print(fNodes: {G.number_of_nodes()}, Edges: {G.number_of_edges()}) print(✅ All tests passed!) 深度分析为什么会有这么多依赖问题1. 地理信息库的俄罗斯套娃依赖OSMnx └── geopandas ├── fiona (读写地理数据格式) │ └── GDAL (底层栅格/矢量库) ← C库 ├── shapely (几何操作) │ └── GEOS (几何引擎) ← C库 ├── pyproj (坐标投影) │ └── PROJ (投影库) ← C库 └── matplotlib (可视化) ├── networkx (图论) ├── pandas (数据分析) └── requests (网络请求)每个C库都需要通过pip编译安装而编译又需要系统头文件和库文件。2. aarch64架构的特殊性问题说明预编译包少PyPI上很多wheel包只提供x86_64版本PPA不兼容Ubuntu PPA主要服务于x86_64编译耗时长源码编译在ARM上可能比x86慢社区经验少aarch64作为服务端架构相关排错资料较少3. Ubuntu版本的滞后性Ubuntu LTS版本追求稳定软件包版本往往落后于最新版Ubuntu 20.04 → GDAL 3.0.4 (2020年)最新GDAL → 3.9.x (2024年)差距超过4个大版本 避坑指南通用建议先检查依赖版本apt-cache policy gdal-bin libgdal-dev gdal-config --version优先使用Conda如果项目允许Conda的环境管理能力在处理地理信息库时比pip更强大。锁定版本在requirements.txt中明确版本号避免自动升级导致不兼容。使用Docker对生产环境考虑使用预装好依赖的Docker镜像docker pull osmnx/osmnx docker run -it osmnx/osmnx python3对于aarch64架构设备降级策略优先不要总是追求最新版本稳定才是第一位源码编译前确认确保有足够的时间和磁盘空间GDAL编译约需30-60分钟占2GB空间利用系统包能用apt install装的尽量用系统包pip只装Python级别的库记录环境保存完整的环境信息方便复现 完整安装时间线[00:00] 开始安装 osmnx (pip install) [00:01] ❌ 错误找不到 gdal-config [00:05] 安装系统GDAL (apt install) [00:10] ❌ 错误GDAL版本不兼容 [00:15] 尝试升级GDAL (PPA) [00:20] ❌ PPA不支持aarch64 [00:25] 尝试源码编译GDAL [00:55] ✅ GDAL编译完成 (耗时30分钟) [01:00] ❌ pip安装osmnx仍有其他问题 [01:10] 尝试降级方案 [01:15] ✅ 安装成功 [01:20] 测试验证通过总耗时约1.5小时大部分时间花在编译GDAL上如果直接采用降级方案[00:00] pip install fiona1.8.22 [00:01] ✅ 安装成功 [00:02] pip install osmnx1.6.0 [00:03] ✅ 安装成功 [00:04] 测试验证通过总耗时不到5分钟 结语在aarch64架构上安装OSMnx的核心教训是理解依赖关系地理信息库的依赖链很深需要系统级和Python级双管齐下版本匹配是关键不是最新就是最好兼容性比新特性更重要降级是武器当升级困难时降级到兼容版本往往是捷径善用Conda如果环境允许Conda可以省去大量头疼的依赖问题希望这篇文章能帮你在OSMnx的安装路上少走弯路 参考资料OSMnx官方文档Fiona GitHubGDAL官网Conda-forge OSMnxNVIDIA Jetson Developer Guide如果你在安装过程中遇到了其他问题欢迎留言交流