I am trying this from hours now and I couldn't get get it solved. I am using this link to setup GeoDjango on Windows. I am getting following error message and I have no clue what to do. All the environment variables are set in Windows and I am able to import with

我现在几个小时都在尝试这个,我无法解决它。我正在使用此链接在Windows上设置GeoDjango。我收到以下错误消息,我不知道该怎么做。所有环境变量都在Windows中设置,我可以导入

from osgeo import gdal

来自osgeo import gdal

successfully in python terminal as

成功在python终端中作为

import gdal

导入gdal

is deprecated. In Postgresql database I have all extensions available as required like address_standardizer, fuzzystrmatch, ogr_fdw, pgrouting, plpgsql, pointcloud, pointcloud_postgis, postgis, postgis_sfcgal, postgis_tiger_geocoder and postgis_topology.

已弃用。在Postgresql数据库中,我根据需要提供所有扩展,如address_standardizer,fuzzystrmatch,ogr_fdw,pgrouting,plpgsql,pointcloud,pointcloud_postgis,postgis,postgis_sfcgal,postgis_tiger_geocoder和postgis_topology。

Django Project Settings:

Django项目设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'postgis_24_sample',
        'USER': 'postgres',
        'PASSWORD': 'Hello123',
        'HOST': 'localhost',
        'PORT': '',
    }
}

GDAL_LIBRARY_PATH = os.getenv('GDAL_LIBRARY_PATH')
GEOS_LIBRARY_PATH = os.getenv('GEOS_LIBRARY_PATH')

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

ERROR:

错误:

(easy_geodj) C:\Users\dell\Desktop\easy_geodj\easy_geodj\djlocate>python manage.py runserver
Unhandled exception in thread started by <function wrapper at 0x066D6330>
Traceback (most recent call last):
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run
    autoreload.raise_last_exception()
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\utils\autoreload.py", line 250, in raise_last_exception
    six.reraise(*_exception)
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\apps\registry.py", line 108, in populate
    app_config.import_models()
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\apps\config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "c:\python27\Lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\auth\models.py", line 4, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\auth\base_user.py", line 52, in <module>
    class AbstractBaseUser(models.Model):
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\models\base.py", line 124, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\models\base.py", line 330, in add_to_class
    value.contribute_to_class(cls, name)
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\models\options.py", line 214, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\__init__.py", line 33, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\utils.py", line 211, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\utils.py", line 115, in load_backend
    return import_module('%s.base' % backend_name)
  File "c:\python27\Lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\backends\postgis\base.py", line 5, in <module>
    from .features import DatabaseFeatures
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\backends\postgis\features.py", line 1, in <module>
    from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\backends\base\features.py", line 4, in <module>
    from django.contrib.gis.db.models import aggregates
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\models\__init__.py", line 3, in <module>
    from django.contrib.gis.db.models.aggregates import *  # NOQA
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\models\aggregates.py", line 1, in <module>
    from django.contrib.gis.db.models.fields import ExtentField
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\models\fields.py", line 3, in <module>
    from django.contrib.gis import forms, gdal
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\forms\__init__.py", line 3, in <module>
    from .fields import (  # NOQA
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\forms\fields.py", line 4, in <module>
    from django.contrib.gis.geos import GEOSException, GEOSGeometry
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\geos\__init__.py", line 5, in <module>
    from .collections import (  # NOQA
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\geos\collections.py", line 11, in <module>
    from django.contrib.gis.geos.geometry import GEOSGeometry, LinearGeometryMixin
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\geos\geometry.py", line 11, in <module>
    from django.contrib.gis import gdal
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\__init__.py", line 43, in <module>
    from django.contrib.gis.gdal.driver import Driver  # NOQA
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\driver.py", line 5, in <module>
    from django.contrib.gis.gdal.prototypes import ds as vcapi, raster as rcapi
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\prototypes\ds.py", line 9, in <module>
    from django.contrib.gis.gdal.libgdal import GDAL_VERSION, lgdal
  File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\libgdal.py", line 48, in <module>
    lgdal = CDLL(lib_path)
  File "c:\python27\Lib\ctypes\__init__.py", line 366, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found

3 个解决方案

#1


3

GIS dependencies are really hard to get right, especially on Windows. If you want to stick with this OS I'd recommend keep using OsGeo4W.

GIS依赖关系很难做到,特别是在Windows上。如果你想坚持使用这个操作系统,我建议继续使用OsGeo4W。

The steps that worked for me are the following:

对我有用的步骤如下:

Make sure to uninstall every distribution of those GIS packages you've installed and carefully follow the OSGeo4W installation instructions. Apache and MapServer are checked to be installed by default, you can uncheck them as they are not needed.

确保卸载已安装的所有GIS软件包的每个分发版,并仔细遵循OSGeo4W安装说明。默认情况下会检查Apache和MapServer是否已安装,您可以在不需要时取消选中它们。

Than you can change your settings.py to look like this:

您可以将settings.py更改为如下所示:

GEOS_LIBRARY_PATH = 'C:\\OSGeo4W64\\bin\\geos_c.dll'
GDAL_LIBRARY_PATH = 'C:\\OSGeo4W64\\bin\\gdal201.dll'

Note 1: the paths will depend on where you installed OSGeo4W but (as I remember) those are the defaults.

注1:路径将取决于您安装OSGeo4W的位置,但(我记得)这些是默认值。

Note 2: if you download and install the 32-bit version your paths should look like this instead:

注意2:如果您下载并安装32位版本,则路径应如下所示:

GEOS_LIBRARY_PATH = 'C:\\OSGeo4W\\bin\\geos_c.dll'
GDAL_LIBRARY_PATH = 'C:\\OSGeo4W\\bin\\gdal201.dll'

I've worked on a project using a similar stack and felt it was a lot easier to set things up on Linux (Ubuntu, particularly). If it's just a learning personal project or if it'll end up hosted on a Linux machine anyway, I'd suggest going for a Linux dev environment.

我使用类似的堆栈开发了一个项目,觉得在Linux上设置(特别是Ubuntu)要容易得多。如果它只是一个学习个人项目,或者无论如何最终都会托管在Linux机器上,我建议你去Linux开发环境。

On Ubuntu, for example, you can just do:

例如,在Ubuntu上,您可以这样做:

$ sudo apt-get install binutils libproj-dev gdal-bin

Also the GeoDjango official docs have some good info to.

此外,GeoDjango官方文档也有一些很好的信息。

更多相关文章

  1. 用于Python项目的低内存和最快查询数据库
  2. 如何自动启动/调试大型项目?
  3. 人工智能和机器学习领域开源项目
  4. Gunicorn + Django + Heroku。Python的路径问题
  5. py2exe使用相对路径的当前目录问题
  6. tensorflow 变量定义路径//问题
  7. python在windows中的文件路径问题
  8. 参与一个Python的开源项目Python-QQ
  9. Python添加默认模块搜索包路径

随机推荐

  1. Android Studio 2.0 to Android Studio 3
  2. 停止android monkey
  3. Android 两种HTTP Client的比较
  4. Android: Sensors on Android 2.3 - Ging
  5. Android: Android NDK Overview
  6. Android 内存泄漏场景分析
  7. Android android:persistentDrawingCache
  8. Android 短信发送器
  9. Android7.0中文文档(API)-- ShareActionPro
  10. AndroidStudio使用教程(第一弹)