2013-12-10 170 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();"創建適當的數據庫。