GeoDjango 安装

概况

一般来说,GeoDjango 安装需要:

  1. Python 和 Django
  2. 空间数据库
  3. 安装地理空间库

以下各节提供了每项要求的细节和安装说明。此外,还提供了以下平台的具体说明:

使用源码

因为 GeoDjango 利用了最新的开源地理空间软件技术,所以需要最新版本的库。如果你的平台没有二进制包,可能需要从源码安装。当从源码编译库时,请严格按照说明进行,尤其是当你是初学者时。

依赖项

Python 和 Django

因为 GeoDjango 是包含在 Django 中的,所以请参考 Django 的 安装说明 来详细了解如何安装。

空间数据库

PostgreSQL (with PostGIS), MySQL, Oracle, and SQLite (with SpatiaLite) are the spatial databases currently supported.

注解

推荐使用 PostGIS,因为它是最成熟、功能最丰富的开源空间数据库。

GeoDjango 安装所需的地理空间库取决于所使用的空间数据库。 下面列出了每个支持的数据库后端的库需求、支持的版本和任何注释。

数据库 库依赖项 支持的版本 注意
PostgreSQL GEOS, GDAL, PROJ, PostGIS 10+ 需要 PostGIS。
MySQL GEOS, GDAL 5.7+ 功能受限
Oracle GEOS, GDAL 19+ 不支持 XE。
SQLite GEOS, GDAL, PROJ, SpatiaLite 3.9.0+ 需要 SpatiaLite 4.3+

关于 PostgreSQL/PostGIS/GEOS/GDAL的可能组合,也请参见 OSGeo Wiki 上的 `这个比较矩阵`__

安装

地理空间库

DATABASES 配置

ENGINE 设置为 空间后端 之一。

添加 django.contrib.gisINSTALLED_APPS

和其他 Django contrib 应用一样,你只需要在配置中的 INSTALLED_APPS 中添加 django.contrib.gis。这是为了让 gis 模板能够被定位 —— 如果不这样做,那么诸如地理管理或 KML 网站地图等功能将无法正常运行。

错误调试

如果你在这里找不到解决问题的方法,那就参与社区吧!你可以:

  • Join the #django-geo IRC channel on Libera.Chat. Please be patient and polite -- while you may not get an immediate response, someone will attempt to answer your question as soon as they see it.
  • Ask your question on the `GeoDjango`__ forum.
  • 如果你认为有 bug,请在 `Django trac`__ 上提交一个工单。 确保提供完整的问题描述,使用的版本,并指定组件为 “GIS”。

库环境配置

到目前为止,安装 GeoDjango 时最常见的问题是无法找到外部共享库(例如 GEOS 和 GDAL)。[1] 通常情况下,造成这个问题的原因是操作系统不知道从源码建立的库的安装目录。

一般情况下,库路径可以通过设置环境变量按每个用户来设置,也可以为整个系统配置库路径。

LD_LIBRARY_PATH 环境变量

用户可以设置这个环境变量来定制他们想要使用的库路径。 典型的从源代码构建的软件的库目录是 /usr/local/lib。 因此,/usr/local/lib 需要包含在 LD_LIBRARY_PATH 变量中。 例如,用户可以在其 bash 配置文件中加入以下内容:

export LD_LIBRARY_PATH=/usr/local/lib

设置系统库路径

在 GNU/Linux 系统中,通常在 /etc/ld.so.conf 中会有一个文件,其中可能包括来自另一个目录中的文件的附加路径,例如 /etc/ld.so.conf.d。作为 root 用户,在 ld.so.conf 中的新行中添加自定义库路径(如 /usr/local/lib)。 这是 一个 例子:

$ sudo echo /usr/local/lib >> /etc/ld.so.conf
$ sudo ldconfig

对于 OpenSolaris 用户,可以使用 crle 工具修改系统库路径。 运行 crle 时不要有任何选项,以查看当前的配置,并使用 crle -l 来设置新的库路径。 修改系统库路径时要 非常 小心:

# crle -l $OLD_PATH:/usr/local/lib

安装 binutils

GeoDjango 使用 find_library 函数(来自 ctypes.util Python 模块)来发现库。 find_library 例程使用一个叫做 objdump 的程序(binutils 包的一部分)来验证 GNU/Linux 系统的共享库。 因此,如果 binutils 没有安装在你的 Linux 系统上,那么 Python 的 ctypes 可能无法找到你的库,即使你的库路径设置正确,并且地理空间库建立得很完美。

可以使用以下命令在 Debian 和 Ubuntu 系统上安装 binutils 包:

$ sudo apt-get install binutils

同样,在 Red Hat 和 CentOS 系统上:

$ sudo yum install binutils

特定平台说明

macOS

由于 macOS 的打包系统多种多样,用户在安装 GeoDjango 时有几种不同的选择。这些选择是:

这一节还包含了从 Python 软件基金会提供的软件包中安装升级版 Python 的说明,但是,这不是必须的。

Python

虽然 macOS 安装了 Python,但用户可以使用 Python 软件基金会提供的 `框架安装程序`__ 。 使用安装程序的一个好处是,macOS 的 Python 将保持 “原始” 状态,供操作系统内部使用。

注解

你需要修改 .profile 文件中的 PATH 环境变量,以便在命令行输入 python 时使用新版本的 Python:

export PATH=/Library/Frameworks/Python.framework/Versions/Current/bin:$PATH

Postgres.app

Postgres.app 是一个独立的 PostgreSQL 服务,包括 PostGIS 扩展。你还需要安装 gdallibgeoip,并安装 Homebrew

安装 Postgres.app 后,在你的 .bash_profile 中添加以下内容,这样你就可以在命令行中运行软件包的程序。用你安装的 Postgres.app 中的 PostgreSQL 版本替换 X.Y

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/X.Y/bin

你可以在终端提示符下输入 which psql 检查路径是否设置正确。

Homebrew

`Homebrew`__ 提供了从源码中构建二进制文件和软件包的 “菜谱”。它为运行 macOS 的 Macintosh 电脑提供了 GeoDjango 的先决条件。因为 Homebrew 仍然从源码构建软件,所以需要使用 Xcode

摘要:

$ brew install postgresql
$ brew install postgis
$ brew install gdal
$ brew install libgeoip

KyngChaos 包

William Kyngesburye 提供了一些 `地理空间库二进制包`__ ,可以帮助在 macOS 上安装 GeoDjango,而不需要从源码编译。 然而,Xcode 仍然需要编译 Python 数据库适配器 psycopg2 (用于 PostGIS)。

注解

SpatiaLite 用户在安装软件包后,应查阅 macOS 特定说明 一节,以获得更多说明。

下载框架包,用于:

  • UnixImageIO
  • PROJ
  • GEOS
  • SQLite3 (包括 SpatiaLite 库)
  • GDAL

按照上面列出的顺序安装包,因为 GDAL 和 SQLite 包需要前面列出的包。

Afterward, you can also install the KyngChaos binary packages for `PostgreSQL and PostGIS`__.

安装完二进制包后,你需要在你的 .profile 中添加以下内容,以便能够从命令行运行包程序:

export PATH=/Library/Frameworks/UnixImageIO.framework/Programs:$PATH
export PATH=/Library/Frameworks/PROJ.framework/Programs:$PATH
export PATH=/Library/Frameworks/GEOS.framework/Programs:$PATH
export PATH=/Library/Frameworks/SQLite3.framework/Programs:$PATH
export PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH
export PATH=/usr/local/pgsql/bin:$PATH
psycopg2

在安装了 KyngChaos 二进制文件并修改了 PATH 后,可以使用以下命令安装 psycopg2

$ python -m pip install psycopg2

注解

如果你没有 pip,请按照 安装说明 来安装。

Fink

`Kurt Schwehr`__ 很慷慨地为 `Fink`__ 包系统的用户创建了 GeoDjango 包。根据你想使用的 Python 版本,可以使用不同的包(从 django-gis 开始)。

MacPorts

`MacPorts`__ 可以用来在运行 macOS 的计算机上安装 GeoDjango 的先决条件。 因为 MacPorts 仍然从源码构建软件,所以需要使用 Xcode

摘要:

$ sudo port install postgresql13-server
$ sudo port install geos
$ sudo port install proj6
$ sudo port install postgis3
$ sudo port install gdal
$ sudo port install libgeoip

注解

你还必须修改你的 .profile 中的 PATH,使 MacPorts 程序可以从命令行访问:

export PATH=/opt/local/bin:/opt/local/lib/postgresql13/bin

另外,增加 DYLD_FALLBACK_LIBRARY_PATH 设置,这样就可以通过 Python:

export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:/opt/local/lib/postgresql13

Windows

为了在 Windows 上安装 GeoDjango,请依次完成以下章节。在本教程中,我们将安装每个应用程序的 64 位版本。

Python

安装一个 64 位版本的 Python。更多信息请参见 安装 Python

PostgreSQL

`EnterpriseDB`__ 网站下载最新的 `PostgreSQL 12.x 安装程序`__ 。 下载后,运行安装程序,按照屏幕上的指示,保持默认选项,除非你知道改变这些选项的后果。

注解

PostgreSQL 安装程序会创建一个新的 postgres 数据库超级用户,你会被提示设置一次密码 —— 一定要记住它!

当安装程序完成时,它会询问 “在退出时启动 Stack Builder?” —— 请确定这个问题,因为需要安装 PostGIS

注解

如果安装成功,PostgreSQL 服务器将在每次系统作为 Windows 服务启动时在后台运行。一个 PostgreSQL 12 开始菜单组将被创建,并包含应用程序堆栈生成器(ASB)和 “SQL Shell” 的快捷方式,它将启动一个 psql 命令窗口。

PostGIS

在堆栈生成器中(如果要在安装程序之外运行, Start ‣ PostgreSQL 12 ‣ Application Stack Builder),从下拉菜单中选择 PostgreSQL 12 (x64) on port 5432,然后点击下一步。展开 Categories ‣ Spatial Extensions 菜单树,选择 PostGIS X.Y for PostgreSQL 12

点击下一步后,会提示你确认选择的软件包和 “下载目录”。再次点击下一步,这将下载 PostGIS,并要求你点击下一步开始 PostGIS 安装程序。在安装过程中选择默认选项。安装过程中包括三个 “是/否” 对话框,三个对话框的默认选项都是 “否”。

OSGeo4W

OSGeo4W 安装程序 有助于安装 GeoDjango 所需的 PROJ、GDAL 和 GEOS 库。首先,下载 `OSGeo4W 安装程序`_ (64 位),并运行它。选择 Express Web-GIS Install,点击下一步。 在 “Select Packages” 列表中,确保选择 GDAL;MapServer 也是默认启用的,但 GeoDjango 不需要,可以放心地取消勾选。点击下一步并接受许可协议后,包将自动下载并安装,之后可以退出安装程序。

修改 Windows 环境

为了使用 GeoDjango,你需要将 OSGeo4W 目录添加到 Windows 系统的 Path 中,并创建 GDAL_DATAPROJ_LIB 环境变量。 下面这组命令可以用 cmd.exe 执行,用于设置。设置完成后,请重新启动设备,以便识别新的环境变量。

set OSGEO4W_ROOT=C:\OSGeo4W64
set GDAL_DATA=%OSGEO4W_ROOT%\share\gdal
set PROJ_LIB=%OSGEO4W_ROOT%\share\proj
set PATH=%PATH%;%OSGEO4W_ROOT%\bin
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /f /d "%PATH%"
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v GDAL_DATA /t REG_EXPAND_SZ /f /d "%GDAL_DATA%"
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROJ_LIB /t REG_EXPAND_SZ /f /d "%PROJ_LIB%"

注解

这假设安装了 64 位版本的 OSGeo4W。如果你已经安装了 32 位版本,你需要将第一条命令改为 set OSGEO4W_ROOT=C:\OSGeo4W

注解

执行这些命令需要管理员权限。要做到这一点,请以管理员身份运行命令提示符,并输入上述命令。你需要注销并重新登录,设置才会生效。

注解

如果你自定义了 OSGeo4W 的安装目录,那么你需要相应地修改 OSGEO4W_ROOT 变量。

安装 Django 并建立数据库

install Django on your system. It is recommended that you create a virtual environment for each project you create.

psycopg2

psycopg2 Python 模块提供 Python 和 PostgreSQL 数据库之间的接口。psycopg2 可以在 Python 虚拟环境中通过 pip 安装:

...\> py -m pip install psycopg2

脚注

[1]GeoDjango 使用 ctypes.util 中的 find_library() 例程来查找共享库。