Windows上的GeoDjango:“找不到GDAL库”/“OSError:[WinError 126]无法找到指定的模块”

问题描述 投票:8回答:2

我一直在尝试设置我的Windows计算机,以便我可以使用PostGIS扩展的本地postgreSQL。有了这个安装,我希望能够在将它放入云之前在本地创建一个geodjango项目。我一直在使用SQLite DB在我的本地机器上使用Django一段时间,但由于下一个项目将部分基于基于坐标的数据,我想设置正确的环境。

导入说明:我已安装miniconda在单独的环境中运行。我工作的时候会激活这个环境“开发”

我试图在线跟踪大多数geodjango信息/教程,但无法使其工作。我做了什么(主要是遵循这个:https://docs.djangoproject.com/en/2.0/ref/contrib/gis/install/#windows):

  1. https://www.enterprisedb.com/downloads/postgres-postgresql-downloads下载并安装最新的(10.3)PostgreSQL设置
  2. 安装后我还安装了使用Application Stack Builder来安装PostGis
  3. 我从https://trac.osgeo.org/osgeo4w/安装了OSGeo4W
  4. 我已经创建了一个批处理脚本,如geodjango网站(https://docs.djangoproject.com/en/2.0/ref/contrib/gis/install/#windows)所述并以管理员身份运行(除了它设置python路径的部分,因为我已经在那里使用python已经有一段时间了现在)
  5. 我在psql shell中尝试了一些命令,我​​想我已经创建了一个名为geodjango,用户名:****并传递:****的数据库。
  6. 我不知道我是否给了django用户所有权限,但我怀疑是这样。

毕竟我创建了一个新的django项目,在settings.py中我添加了一些部分:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.gis',
'nameOfMyApp',
]

我在settings.py中也有这个:

DATABASES = {
'default': {
    'ENGINE': 'django.contrib.gis.db.backends.postgis',
    'NAME': 'geodjango',
    'USER': '****',
    'PASSWORD': '****',
    'HOST': 'localhost',
}
}

# FOR GEODJANGO
POSTGIS_VERSION = (2, 4, 3)

当我尝试在django中设置数据库时,我运行(在右侧文件夹中):

python manage.py makemigrations

我收到以下错误:

django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal202", "gdal201", "gdal20", "gdal111", "gdal110", "gdal19"). Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.

我试图解决这个问题,但似乎没有任何效果。任何人都可以帮我在本地设置这一切吗?

更新7-3-2018:

现在我收到以下错误:

OSError: [WinError 126] The specified module could not be found

(而.dll就在那里......)

python django postgresql postgis geodjango
2个回答
27
投票

我发现以下内容适用于Windows:

  • 运行python来检查你的python是32位还是64位。
  • 将相应的OSGeo4W(32位或64位)安装到C:\OSGeo4WC:\OSGeo4W64中: 注意:选择Express Web-GIS Install,然后单击下一步。 在“选择包”列表中,确保选中GDAL;默认情况下也会启用MapServer和Apache,可以安全地取消选中。
  • 确保settings.py中包含以下内容: import os if os.name == 'nt': import platform OSGEO4W = r"C:\OSGeo4W" if '64' in platform.architecture()[0]: OSGEO4W += "64" assert os.path.isdir(OSGEO4W), "Directory does not exist: " + OSGEO4W os.environ['OSGEO4W_ROOT'] = OSGEO4W os.environ['GDAL_DATA'] = OSGEO4W + r"\share\gdal" os.environ['PROJ_LIB'] = OSGEO4W + r"\share\proj" os.environ['PATH'] = OSGEO4W + r"\bin;" + os.environ['PATH']
  • 运行python manage.py check以验证geodjango是否正常工作。

3
投票

在我的情况下(Windows10Pro + Python3.7.1),存在(自动选择的)dll是不够的,即gdal111.dll

我意识到我也有gdal204.dll位于C:\OSGeo4W\bin并试图用lib_names“加密”名为'gdal204'的列表变量,在第24行(关于Windows NT共享库)%PYTHON_ROOT%\Lib\site-packages\django\contrib\gis\gdal\libgdal.py,即

#[...]
elif os.name == 'nt':
    # Windows NT shared libraries
    lib_names = ['gdal204', 'gdal202', 'gdal201', 'gdal20', 'gdal111', 'gdal110', 'gdal19']
#[...]            ^^^^^^^

现在没有负面影响。

© www.soinside.com 2019 - 2024. All rights reserved.