Skip to content

解决 AttributeError: module 'fiona' has no attribute 'path' 错误

问题描述

使用 GeoPandas 库读取地理数据文件时,突然出现以下错误:

python
AttributeError: module 'fiona' has no attribute 'path'

该错误常出现在运行类似代码时:

python
import geopandas as gpd
countries = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))

虽然所有必要的库(GeoPandas 和 Fiona)均已安装导入,但程序突然停止工作。此问题通常发生在 Fiona 库升级后,且在使用 GeoPandas 读取地理空间数据时触发。

触发环境

该错误常见于:

  • Python 3.7+
  • GeoPandas ≤0.14.3
  • Fiona ≥1.10.0

错误原因

根本原因是 Fiona 1.10.0 版本移除了 fiona.path 属性接口(发布于2024年9月4日)。旧版 GeoPandas(≤0.14.3)依赖此属性操作文件路径,导致版本兼容性冲突:

geopandas v0.14.3 → 调用 fiona.path ← Fiona v1.10+ 已移除该属性

解决方案

✅ 推荐方案:升级 GeoPandas

最彻底的解决方案是升级到 GeoPandas ≥0.14.4(2024年4月26日发布),该版本已修复与 Fiona 1.10+ 的兼容性问题:

bash
# 使用pip升级
pip install --upgrade geopandas==0.14.4

# 使用conda升级
conda install -c conda-forge geopandas=0.14.4

升级后验证版本:

python
import geopandas as gpd
print(gpd.__version__)  # 应显示 ≥0.14.4

⚠️ 兼容方案:降级 Fiona

若无法立即升级 GeoPandas,可降级到 Fiona ≤1.9.6

bash
# pip 用户
pip install fiona==1.9.6

# conda 用户
conda install -c conda-forge fiona=1.9.6

注意事项

  1. Python 3.7 用户需使用 fiona==1.8.13 + geopandas==0.9.0
  2. Fiona 1.9.6 需 Python ≥3.8

🔧 Anaconda 用户解决方案

通过 Anaconda Navigator 手动降级:

  1. 打开 Anaconda Navigator → Environments
  2. 搜索框输入 "fiona"
  3. 勾选 fiona,底部选择 "Mark for specific version installation"
  4. 选择 1.9.51.9.6 → 点击 Apply

Anaconda 降级 Fiona

🚀 GeoPandas 1.0+ 用户迁移

GeoPandas 1.0 移除了内置数据集和 Fiona 依赖。需额外安装 geodatasets

python
# 安装扩展库
pip install geodatasets

# 新版数据加载方式
from geodatasets import get_path
gdf = gpd.read_file(get_path("nybb"))

验证解决方案

修复后运行测试代码:

python
import geopandas as gpd

# GeoPandas ≥0.14.4 推荐方式
world = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
print(world.head())

# GeoPandas 1.0+ 方式
from geodatasets import get_path
nybb = gpd.read_file(get_path("nybb"))
print(nybb.head())

版本兼容对照表

使用场景推荐GeoPandas版本推荐Fiona版本
新项目/可升级环境≥0.14.4≥1.10.0
旧环境维护0.9.0~0.14.31.9.5~1.9.6
Python 3.7兼容0.9.01.8.13
未来兼容方案1.0+ + geodatasets不依赖

最佳实践建议

  1. 优先升级 GeoPandas:这是最稳定的长期解决方案
  2. 使用虚拟环境隔离项目依赖
    bash
    python -m venv geo_env
    source geo_env/bin/activate  # Linux/Mac
    geo_env\Scripts\activate     # Windows
  3. 固定关键库版本(在 requirements.txt):
    geopandas==0.14.4
    fiona==1.9.6
  4. 大型项目迁移时逐步测试:
    python
    import fiona
    print(hasattr(fiona, 'path'))  # 应返回False

保持环境一致

使用 conda env export > environment.ymlpip freeze > requirements.txt 保存精确的依赖版本,确保团队协作和部署的一致性。