GeoDjango 安装
概况
一般来说,GeoDjango 安装需要:
以下各节提供了每项要求的细节和安装说明。此外,还提供了以下平台的具体说明:
使用源码
因为 GeoDjango 利用了最新的开源地理空间软件技术,所以需要最新版本的库。如果你的平台没有二进制包,可能需要从源码安装。当从源码编译库时,请严格按照说明进行,尤其是当你是初学者时。
依赖项
Python 和 Django
因为 GeoDjango 是包含在 Django 中的,所以请参考 Django 的 安装说明 来详细了解如何安装。
空间数据库
目前支持的空间数据库包括 PostgreSQL(带有 PostGIS)、MySQL、Oracle 和 SQLite(带有 SpatiaLite)。
备注
推荐使用 PostGIS,因为它是最成熟、功能最丰富的开源空间数据库。
GeoDjango 安装所需的地理空间库取决于所使用的空间数据库。 下面列出了每个支持的数据库后端的库需求、支持的版本和任何注释。
数据库 | 库依赖项 | 支持的版本 | 注意 |
---|---|---|---|
PostgreSQL | GEOS, GDAL, PROJ, PostGIS | 12+ | 需要 PostGIS。 |
MySQL | GEOS, GDAL | 8+ | 功能受限。 |
Oracle | GEOS, GDAL | 19+ | 不支持 XE。 |
SQLite | GEOS, GDAL, PROJ, SpatiaLite | 3.21.0+ | 需要 SpatiaLite 4.3+ |
关于 PostgreSQL/PostGIS/GEOS/GDAL的可能组合,也请参见 OSGeo Wiki 上的 `这个比较矩阵`__ 。
安装
地理空间库
数据库安装
DATABASES 配置
添加 django.contrib.gis
到 INSTALLED_APPS
和其他 Django contrib 应用一样,你只需要在配置中的 INSTALLED_APPS 中添加 django.contrib.gis。这是为了让 gis
模板能够被定位 —— 如果不这样做,那么诸如地理管理或 KML 网站地图等功能将无法正常运行。
错误调试
如果你在这里找不到解决问题的方法,那就参与社区吧!你可以:
- 加入 Libera.Chat 上的
#django-geo
IRC 频道。请耐心和礼貌 — 尽管您可能不会立即得到回复,但只要有人看到您的问题,他们会尽快尝试回答。 - 在 `GeoDjango`__ 论坛上提出您的问题。
- 如果你认为有 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 扩展。你还需要安装 gdal
和 libgeoip
,并安装 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
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 15.x 安装程序`__。下载完成后,运行安装程序,按照屏幕上的提示进行操作,除非您知道更改选项的后果,否则保持默认选项。
备注
PostgreSQL 安装程序会创建一个新的 postgres
数据库超级用户,你会被提示设置一次密码 —— 一定要记住它!
当安装程序完成时,它会询问 “在退出时启动 Stack Builder?” —— 请确定这个问题,因为需要安装 PostGIS。
备注
如果成功安装,每次系统启动时,PostgreSQL 服务器将作为 Windows 服务在后台运行。将创建一个 PostgreSQL 15 的开始菜单组,其中包含 Application Stack Builder (ASB) 和 ‘SQL Shell’ 的快捷方式,后者将启动一个 psql
命令窗口。
PostGIS
在 Stack Builder 中(在安装程序外运行,选择 开始 ‣ PostgreSQL 15 ‣ Application Stack Builder),从下拉菜单中选择 PostgreSQL 15 (x64) on port 5432,然后点击下一步。展开 类别 ‣ 空间扩展 菜单树,并选择 PostGIS X.Y for PostgreSQL 15。
点击下一步后,您将被提示确认所选的包和“下载目录”。再次点击下一步,这将下载 PostGIS,并要求您点击下一步开始 PostGIS 安装程序。在安装过程中,包括四个 Yes/No 对话框,所有四个的默认选项都是 “No”。
OSGeo4W
OSGeo4W installer 可以帮助安装 GeoDjango 所需的 PROJ、GDAL 和 GEOS 库。首先,下载 OSGeo4W installer 并运行它。选择 Express Web-GIS Install 然后点击下一步。在 ‘Select Packages’ 列表中,确保选择了 GDAL。如果默认启用了其他任何软件包,它们对于 GeoDjango 是不需要的,可以安全地取消选中。点击下一步并接受许可协议后,软件包将被自动下载和安装,然后您可以退出安装程序。
修改 Windows 环境
为了使用 GeoDjango,你需要将 OSGeo4W 目录添加到 Windows 系统的 Path
中,并创建 GDAL_DATA
和 PROJ_LIB
环境变量。 下面这组命令可以用 cmd.exe
执行,用于设置。设置完成后,请重新启动设备,以便识别新的环境变量。
set OSGEO4W_ROOT=C:\OSGeo4W
set GDAL_DATA=%OSGEO4W_ROOT%\apps\gdal\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%"
备注
执行这些命令需要管理员权限。要做到这一点,请以管理员身份运行命令提示符,并输入上述命令。你需要注销并重新登录,设置才会生效。
备注
如果你自定义了 OSGeo4W 的安装目录,那么你需要相应地修改 OSGEO4W_ROOT
变量。
安装 Django 并建立数据库
在您的系统上 安装 Django。建议为您创建的每个项目创建一个 虚拟环境。
psycopg
psycopg
Python 模块提供了 Python 和 PostgreSQL 数据库之间的接口。您可以在 Python 虚拟环境中使用 pip 安装 psycopg
:
...\> py -m pip install psycopg
脚注
[1] | GeoDjango 使用 ctypes.util 中的 find_library() 例程来查找共享库。 |