导入django.contrib.gis.gdal时出现Geodjango异常:OSError:/usr/lib/libgdal.so.1:未定义的符号:sqlite3_column_table_name

时间:2017-01-07 12:44:41

标签: postgresql postgis conda geodjango

我已按照tutorial在我的Ubuntu 14.04上安装Geodjango。我正在使用Django 1.10和Python 3.5,postgres-9.6和postgis 2.3。

我已检查herehere,但未找到解决方案。 在新安装的ubuntu 14.04虚拟机中,它运行良好。

但在我的安装中,当我尝试进行迁移时,我得到了: OSError:/usr/lib/libgdal.so.1:未定义的符号:sqlite3_column_table_name

进一步调查,我只是尝试了:

from django.contrib.gis import gdal

得到了:

Traceback (most recent call last):   
File "<stdin>", line 1, in <module>   
File "/home/pv/anaconda3/envs/dj110py35/lib/python3.5/site-packages/django/contrib/gis/gdal/__init__.py", line 49, in <module>
    from django.contrib.gis.gdal.driver import Driver  # NOQA   
File "/home/pv/anaconda3/envs/dj110py35/lib/python3.5/site-packages/django/contrib/gis/gdal/driver.py", line 5, in <module>
    from django.contrib.gis.gdal.prototypes import ds as vcapi, raster as rcapi   
File "/home/pv/anaconda3/envs/dj110py35/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/ds.py", line 9, in <module>
    from django.contrib.gis.gdal.libgdal import GDAL_VERSION, lgdal   
File "/home/pv/anaconda3/envs/dj110py35/lib/python3.5/site-packages/django/contrib/gis/gdal/libgdal.py", line 48, in <module>
    lgdal = CDLL(lib_path)   
File "/home/pv/anaconda3/envs/dj110py35/lib/python3.5/ctypes/__init__.py", line 347, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /usr/lib/libgdal.so.1: undefined symbol: sqlite3_column_table_name

有关于如何修复设置的建议吗?

更新

我的conda环境似乎有问题。当我开始使用pip virtualenv时,问题不再出现了。我没有回答这个问题,因为我找不到解决方案,只能找到解决方法。但使用pip virtualenv重建环境

4 个答案:

答案 0 :(得分:1)

在conda环境中:conda install -c conda-forge gdal=2.2.1

在django settings.py中: GDAL_LIBRARY_PATH = '<HOME>/anaconda3/envs/<env_name>/lib/libgdal.so'

答案 1 :(得分:0)

我也遇到了这个问题并指定了

GDAL_LIBRARY_PATH = <HOME>/anaconda3/envs/<env_name>/lib/libgdal.so

project.settingsos.environ.setdefault)导致

libicui18n.so.56: cannot open shared object file: No such file or directory. 

对我有用的修正是升级icu:

conda install -c conda-forge icu=58

升级icu导致其他软件包版本也发生了一些变化(qt从5.6.2-4降级到5.6.2-3,其余的升级了)。

答案 2 :(得分:0)

我只是在conda环境下运行:

conda install gdal

Guy de Carufel's solution对我没有用,尽管他指出了正确的方向,谢谢

答案 3 :(得分:0)

您是否已从源代码构建SQLite?然后,您忘记启用列元数据。用

重新编译SQLite
CFLAGS="-DSQLITE_ENABLE_COLUMN_METADATA=1" ./configure
make
sudo make install

使用尖端的SQLite玩乐。

参考-https://www.sqlite.org/compile.html#enable_column_metadata