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

Yor*_*ian 10 python django postgresql postgis geodjango

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

导入说明:我已经安装了mini-conda以在单独的环境中运行.我工作的时候会激活这个环境"开发"

我试图在线跟踪大多数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已经在那里,因为我已经使用python一段时间了)
  5. 我在psql shell中尝试了一些命令,我​​想我已经创建了一个名为geodjango的数据库,用户名:****并传递:****.
  6. 我不知道我是否给了geodjango用户所有priveleges,但我怀疑.

毕竟我创建了一个新的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',
]
Run Code Online (Sandbox Code Playgroud)

我在settings.py中也有这个:

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

# FOR GEODJANGO
POSTGIS_VERSION = (2, 4, 3)
Run Code Online (Sandbox Code Playgroud)

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

python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

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

更新7-3-2018:

现在我收到以下错误:

OSError: [WinError 126] The specified module could not be found
Run Code Online (Sandbox Code Playgroud)

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

Udi*_*Udi 34

我发现以下内容适用于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']
    
    Run Code Online (Sandbox Code Playgroud)
  • 运行python manage.py check以验证geodjango是否正常工作.

  • 乌迪你让我摆脱了疯狂 (3认同)
  • 乌迪,你是当今的英雄。现在看来可以了,谢谢! (2认同)
  • 谢谢,我找到的简单解释之一 (2认同)
  • 它有效,但同样重要的是,代码必须放置在“settings.py”文件的开头。 (2认同)

kin*_*urr 22

在我的 Windows 10 Pro 机器上更新了一些 OSGEO4W 后,我又开始遇到 GDAL 绑定问题。我以前使用了此处发布的解决方案和本教程的组合

这对我使用 Windows 10 Pro 64 位、Django 3.0.6 和 GDAL 3.0.4 使用 python 3.7 虚拟环境有效。我已经在没有 OSGEO4W 的情况下对其进行了测试,它似乎可以工作。

首先,从Christoph Gohlke 的 Unofficial Windows Binaries for Python Extension Packages下载 GDAL 轮。

pip install "/path/to/GDAL?3.0.4?cp37?cp37m?win_amd64.whl"
Run Code Online (Sandbox Code Playgroud)

修改libgdal.py通过添加'gdal300'到Django的GDAL包Python文件的第23行(/路径/到/ virtual_env / LIB /站点包/ django的/了contrib / GIS / GDAL / libgdal在虚拟envrironment站点包文件.py):

elif os.name == 'nt':
    # Windows NT shared libraries
    lib_names = ['gdal300', 'gdal204', 'gdal203', 'gdal202', 'gdal201', 'gdal20']
Run Code Online (Sandbox Code Playgroud)

最后,在Django 项目的settings.py文件中添加

if os.name == 'nt':
    VENV_BASE = os.environ['VIRTUAL_ENV']
    os.environ['PATH'] = os.path.join(VENV_BASE, 'Lib\\site-packages\\osgeo') + ';' + os.environ['PATH']
    os.environ['PROJ_LIB'] = os.path.join(VENV_BASE, 'Lib\\site-packages\\osgeo\\data\\proj') + ';' + os.environ['PATH']
Run Code Online (Sandbox Code Playgroud)

  • 你是最棒的,终于对我有用了,非常感谢! (2认同)
  • 简短说明:对于 python 3.8,添加 `gdal301` 作为 lib_names。 (2认同)
  • 对于 Python 3.9,请从二进制文件站点安装“GDAL-3.2.1-cp39-cp39-win_amd64.whl”,并将“gdal302”添加到“lib_names”列表中。 (2认同)

kee*_*ive 5

就我而言(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']
#[...]            ^^^^^^^
Run Code Online (Sandbox Code Playgroud)

目前没有负面影响。