为啥它在运行迁移时抛出`GeoDjango Postgis 要求不满足得到错误?

Posted

技术标签:

【中文标题】为啥它在运行迁移时抛出`GeoDjango Postgis 要求不满足得到错误?【英文标题】:Why it throws `GeoDjango Postgis requirements not satisfied getting error while running migrations?为什么它在运行迁移时抛出`GeoDjango Postgis 要求不满足得到错误? 【发布时间】:2019-07-31 17:31:42 【问题描述】:

我正在使用带有 django 的 Postgresql 数据库,并且已经使用它安装在 PostGis 中

CREATE EXTENSION postgis;

gdalproj.4geos 已安装在 contrib.gis django package 中。正如documentation 所说,它们应该在安装 PostGis 之前安装。这是否意味着它们应该安装在 Postgresql 数据库或其他东西上。

1)我还需要在 postgresql 数据库上安装它们吗?

目前我已经收录在settings.py

INSTALLED_APPS = [
      .
      .
      'django.contrib.gis',
]

DATABASES = 
        'default': 
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '......',
        'USER' : '.........',
        'PASSWORD': '........',
        'HOSTNAME': 'localhost',
        'PORT': '5432',
    ,

但是当我将它包含在models.py 中时。

 from django.contrib.gis.db import models as geomodels

2) 我尝试运行迁移时收到此错误:

 django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal202", "gdal201", "gdal20", "gdal111", "gdal110", "gdal19"). Is GDAL in

停滞不前?如果是,请尝试在您的设置中设置 GDAL_LIBRARY_PATH。

我不确定我应该修复什么来运行迁移,如果这个错误与数据库或 django 相关

3)我需要在 django 和 postgresql 上都安装 GdalGeosproj 吗?

【问题讨论】:

【参考方案1】:

您需要按照以下步骤在项目中按照文档设置 post GIS:

    在将 PostGIS 扩展安装到项目之前,在安装了 postgres 的计算机上安装 GEOS、PROJ.4 和 GDAL。安装文档已包含在链接中。您可以从here 查看 PostGIS 安装要求。

    For installing GEOS For installing PROJ.4 For installing GDAL

    创建空间数据库。安装上述要求后创建 PostGIS 扩展。您可以通过在您的 postgres shell 中执行以下代码来做到这一点

    > CREATE EXTENSION postgis;
    

    或者您可以将以下迁移添加到您的项目中

    from django.contrib.postgres.operations import CreateExtension
    from django.db import migrations
    
    class Migration(migrations.Migration):
    
        operations = [
            CreateExtension('postgis'),
            ...
        ]
    

    Visit here for more information

    之后,您可以将以下内容添加到您的settings.py

    DATABASES = 
        'default': 
             'ENGINE': 'django.contrib.gis.db.backends.postgis',
             'NAME': 'geodjango',
             'USER': 'geo',
        ,
    
    
    INSTALLED_APPS = [
        ..
        ..
        'django.contrib.admin',
        'django.contrib.gis',
        ..
        ..
    
    ]
    
    

按照这些步骤后,您可以使用 django PostGIS。有关安装 PostGIS 的更多信息,请访问https://docs.djangoproject.com/en/2.1/ref/contrib/gis/tutorial/#setting-up

【讨论】:

但是当我为我的所有应用程序使用 postgresql 作为数据库并且使用 postgis 作为我的默认数据库后,不会导致任何类型的错误。 这是正常的 postgis 只是包装了 postgres 的所有功能 好的,但是如果我在使用 postgis 作为数据库引擎后尝试运行服务器,它仍然会给我 django.core.exceptions.ImproperlyConfigured: 找不到 GDAL 库的错误(试过“gdal202 ”、“gdal201”、“gdal20”、“gdal111”、“gdal110”、“gdal19”)。 GDAL是否停滞不前?如果是,请尝试在您的设置中设置 GDAL_LIBRARY_PATH。 你的机器上安装GDAL了吗?请查看this link 了解更多信息。 我已经下载了包含 gdal 的 OSGeo4W 包,并且我还根据文档设置了系统变量,但它仍然给出错误。根据文档,如果文件位于非标准位置,那么我们可以指定 libgdal.so 文件的路径,但我在包中的任何地方都没有该文件。

以上是关于为啥它在运行迁移时抛出`GeoDjango Postgis 要求不满足得到错误?的主要内容,如果未能解决你的问题,请参考以下文章

当有任何 SOAP 请求的挂起的实体框架数据库迁移时抛出 SOAP 异常

为啥进程列表时抛出 java.lang.UnsupportedOperationException [重复]

GeoDjango:PostgreSQL没有运行迁移,对象没有属性'geo_db_type

为啥 FtpWebRequest 恰好在长传输结束时抛出 WebException?

Azure 机器学习在运行管道时抛出错误“无效图:节点中的计算目标无效”

为啥mysql PDO不会在失败时抛出错误[重复]