2013-12-10 172 views
10

我正试图为GeoDjango安装Spatialite!在OS X上为python(GeoDjango)安装Spatialite

我已经在使用自制软件,它一般都很简单方便,所以我最初试图按照GeoDjango的Homebrew instructions

但是,这并没有安装任何数据库,即Spatialite。下一步是尝试安装Spatialite本身,但是没有提供Django文档的特定于Homebrew的说明。

我发现this tutorial看起来很完美 - GeoDjango的一个自制和virtualenv友好的Spatialite安装。

但它不起作用......看起来我的pysqlite与OS X附带的SQLite的非空间启用版本链接,而不是从Homebrew安装的Spatial-ised版本,我得到Django尝试连接到数据库时发生此错误:

“pysqlite库不支持C扩展加载。必须配置SQLite和pysqlite以允许加载扩展以使用SpatiaLite。”

pysqlite的作者没有回复my pleas for help on Github,我还没有通过Google找到任何东西。

所以我回到绘图板并决定在GeoDjango文档中关注"Mac OS X-specific instructions" ...通过安装KyngChaos二进制包中的各种地理库。

文档中提到“按照上面列出的顺序安装软件包”,但是我发现我无法安装UnixImageIO而没有先安装PROJ。文档中下载Spatialite二进制文件(http://www.gaia-gis.it/spatialite-2.3.1/binaries.html)的链接已被破坏,因此我使用了KyngChaos的“Spatialite Tools v4.1”。

进行到下一步我得到这个错误:

$ spatialite geodjango.db "SELECT InitSpatialMetaData();" 
SQLite header and source version mismatch 
2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a 
2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef 

不是真的知道什么是错在这一点上。

有别人here on SO谁已经在KyngChaos路线,只是结束了与同“无论SQLite和pysqlite必须被配置为允许扩展装载”错误,我从家酿的路线了呢。

我发现this ticket #17756添加pyspatialite支持的Django - pyspatialite应该是pip install一切更简单的方法,但遗憾的是它不工作,要么(见朝票的底部评论)。

我有点不愿意开始尝试从源代码构建所有东西,因为它似乎可能会再次遇到同样的问题,但花费数小时搜索有关隐蔽编译器错误,魔法标志和路径的信息等等。

我即将放弃使用Postgres/PostGIS。

回答

3

我能得到现在这个工作,在这里使用提示:
https://github.com/ghaering/pysqlite/issues/60#issuecomment-50345210

我不知道,如果它是使用固定的,或者只是家酿小桶或底层封装具有现实路径已经更新,现在安装干净。尽管如此,它现在可以工作

我复制下面我采取的步骤:

brew update 
brew install sqlite # 3.8.5 
brew install libspatialite # 4.2.0 
brew install spatialite-tools # 4.1.1 

git clone https://github.com/ghaering/pysqlite.git 
cd pysqlite 

(其中酿造报道我现有的I取消链接他们的版本并安装最新作上述评论)

然后进行编辑setup.cfg注释掉#define=SQLITE_OMIT_LOAD_EXTENSION和指定路径:

include_dirs=/usr/local/opt/sqlite/include 
library_dirs=/usr/local/opt/sqlite/lib 

激活了virtualenv,我想要它安装,然后

python setup.py build 
python setup.py install 

build_static仍然失败,clang: error: no such file or directory: 'sqlite3.c'

(也许我应该做的pip install .在GitHub的问题提出的建议)

现在spatialite geodjango.db "SELECT InitSpatialMetaData();"成功,尽管有一个可忽略的错误:

InitSpatiaMetaData() error:"table spatial_ref_sys already exists"

ie可能甚至没有必要运行该命令

3

当我istalling这个我按照这个指示https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/spatialite/#pysqlite2

pysqlite2

如果你已经决定使用pysqlite2而不是sqlite3的Python的STDLIB模块的新版本,那么你需要做确保它可以加载外部扩展(即,所需的enable_load_extension方法可用,因此可以加载SpatiaLite)。

这可能涉及到自己构建它。对于这一点,下载pysqlite2 2.6,并解压:

$ wget https://pypi.python.org/packages/source/p/pysqlite/pysqlite-2.6.3.tar.gz 
$ tar xzf pysqlite-2.6.3.tar.gz 
$ cd pysqlite-2.6.3 

下一步,使用文本编辑器(如emacs的或vi)编辑setup.cfg文件,如下所示:

[build_ext] 
#define= 
include_dirs=/usr/local/include 
library_dirs=/usr/local/lib 
libraries=sqlite3 
#define=SQLITE_OMIT_LOAD_EXTENSION 
+0

谢谢,但你需要阅读我的问题中的一切,我的问题比刚才Django文档(我已经完成)更复杂 – Anentropic

+0

我错过了什么部分,对不起不完整的答案 – MZaragoza

+0

我已经建立了pysqlite扩展支持启用,但它似乎与我的SQLite的系统安装,而不是我通过自制安装的GIS启用的SQLite链接...问题详细在这里https://github.com/ ghaering/pysqlite /问题/ 60 – Anentropic

1

我有同样的错误:SQLite header and source version mismatch

对我来说,更新libsqlite3-dev就足够了。

之后调用$ spatialite geo.db "SELECT InitSpatialMetaData();"创建适当的数据库。