You need to enable JavaScript to run this app. Django REST迁移报cannot read file data: is a directory
优惠活动
大模型
产品
解决方案
定价
更多

Django REST迁移报cannot read file data: is a directory

报错本质

这个问题的核心是Django加载GDAL动态库的路径完全错误,和你定义PointField的代码、数据库PostGIS配置没有直接关系:Django通过默认逻辑搜索GDAL共享库时,拿到的目标路径直接指向了你项目下的/home/aarush/git_fudo/food1_back/food1_back目录,把文件夹当成了可加载的动态库文件,才触发“无法读取目录数据”的系统级报错。

修复操作步骤
  • 先定位系统中真实的GDAL、GEOS动态库文件路径,不要依赖默认搜索逻辑猜路径。在终端执行:
    find / -name "libgdal.so*" 2>/dev/null
    find / -name "libgeos_c.so*" 2>/dev/null
    按照你当前的运行环境(Anaconda Python),找到的路径大概率是类似/home/aarush/anaconda3/lib/libgdal.so、/home/aarush/anaconda3/lib/libgeos_c.so的文件,注意必须是.so结尾的文件,不是文件夹。
  • 在项目settings.py的顶部,强制指定两个GIS库的精确路径,跳过Django的默认路径搜索逻辑:
    # 替换为上一步查到的真实库文件路径
    GDAL_LIBRARY_PATH = '/home/aarush/anaconda3/lib/libgdal.so'
    GEOS_LIBRARY_PATH = '/home/aarush/anaconda3/lib/libgeos_c.so'
    
  • 排查错误的环境变量配置。在当前运行Django的终端执行:
    echo $GDAL_LIBRARY_PATH
    echo $GEOS_LIBRARY_PATH
    如果输出结果是文件夹路径而非.so结尾的文件路径,需要去对应配置文件(.bashrc/.zshrc/虚拟环境激活脚本)里把错误的环境变量值修改为正确的库文件路径,或者直接删除错误的变量配置。
  • 验证修复效果:执行python manage.py check,没有报库加载错误后,再执行迁移操作即可。

避坑提示:你当前环境同时存在系统全局安装的GDAL/GEOS/proj4和Anaconda环境自带的GIS依赖,优先让Django加载和当前Python解释器同环境的库文件,不要跨路径加载系统全局库,避免出现ABI版本不兼容的新报错。


内容的提问来源于stack exchange,提问作者aarush_s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 00:06:03