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/nullfind / -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_PATHecho $GEOS_LIBRARY_PATH
如果输出结果是文件夹路径而非.so结尾的文件路径,需要去对应配置文件(.bashrc/.zshrc/虚拟环境激活脚本)里把错误的环境变量值修改为正确的库文件路径,或者直接删除错误的变量配置。 - 验证修复效果:执行
python manage.py check,没有报库加载错误后,再执行迁移操作即可。
避坑提示:你当前环境同时存在系统全局安装的GDAL/GEOS/proj4和Anaconda环境自带的GIS依赖,优先让Django加载和当前Python解释器同环境的库文件,不要跨路径加载系统全局库,避免出现ABI版本不兼容的新报错。
内容的提问来源于stack exchange,提问作者aarush_s
相关产品推荐
相关产品推荐

