web-dev-qa-db-fra.com

GeoDjango sous Windows: "Impossible de trouver la bibliothèque GDAL" / "OSError: [WinError 126] Le module spécifié est introuvable"

J'ai essayé de configurer mon ordinateur Windows de telle sorte que je puisse avoir une extension PostgreSQL locale avec PostGIS. Avec cela installé, j'espère pouvoir créer un projet avec geodjango localement avant de le mettre dans le cloud. Je travaille avec Django depuis un petit moment maintenant sur ma machine locale avec la base de données SQLite, mais puisque le prochain projet sera en partie basé sur des données basées sur les coordonnées, je voulais configurer le bon environnement.

Remarque sur l'importation: j'ai installé un mini-conda pour fonctionner dans un environnement séparé. J'active quand même ce "développement" de l'environnement quand je travaille

J'ai essayé de suivre la plupart des informations/didacticiels de geodjango en ligne, mais je n'arrive pas à les faire fonctionner. Ce que j'ai fait (principalement suivi ceci: https://docs.djangoproject.com/en/2.0/ref/contrib/gis/install/#windows ):

  1. Téléchargez et installez la dernière (10.3) configuration PostgreSQL depuis https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
  2. Après l'installation, j'ai également installé utilisé Application Stack Builder pour installer PostGis
  3. J'ai installé OSGeo4W depuis https://trac.osgeo.org/osgeo4w/
  4. J'ai créé un script batch comme décrit sur le site Web de geodjango ( https://docs.djangoproject.com/en/2.0/ref/contrib/gis/install/#windows ) et l'ai exécuté en tant que administrateur (sauf pour la partie où il définit le chemin d'accès à python, car python était déjà là depuis que j'utilise python depuis un certain temps maintenant))
  5. J'ai essayé une commande dans psql Shell et je pense que j'ai créé une base de données avec le nom: geodjango, nom d'utilisateur: **** et passe: ****.
  6. Je ne sais pas si j'ai accordé à l'utilisateur de geodjango tous les privilèges, mais je le soupçonne.

Après tout cela, j'ai créé un nouveau projet Django et dans settings.py, j'ai ajouté quelques parties:

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

J'ai également ceci dans settings.py:

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

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

Lorsque j'essaie de configurer la base de données dans Django je lance (dans le bon dossier):

python manage.py makemigrations

J'obtiens l'erreur suivante:

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.

J'ai essayé de résoudre ce problème, mais rien ne semble fonctionner. Quelqu'un peut-il m'aider à mettre tout cela en place localement?

Mise à jour 7-3-2018:

Maintenant, j'obtiens l'erreur suivante:

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

(pendant que le .dll est là ...)

9
Yorian

J'ai trouvé ce qui suit pour fonctionner pour Windows:

  • Exécutez python pour vérifier si votre python est de 32 ou 64 bits.
  • Installez le correspondant OSGeo4W (32 ou 64 bits) dans C:\OSGeo4W ou C:\OSGeo4W64:
    • Remarque: Sélectionnez Installation Express Web-GIS et cliquez sur Suivant.
    • Dans la liste "Sélectionner les packages", assurez-vous que GDAL est sélectionné; MapServer et Apache sont également activés par défaut, peuvent être décochés en toute sécurité.
  • Assurez-vous que les éléments suivants sont inclus dans votre 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']
    
  • Courir python manage.py check pour vérifier que geodjango fonctionne correctement.

29
Udi

Dans mon cas ((Windows10Pro + Python3.7.1), la présence de la DLL (choisie automatiquement) n'était pas suffisante, à savoir gdal111.dll.

J'ai réalisé que j'avais aussi gdal204.dll situé à C:\OSGeo4W\bin et a essayé d'enrichir la variable de liste nommée lib_names avec 'gdal204', à la ligne 24 (concernant les bibliothèques partagées Windows NT) de %PYTHON_ROOT%\Lib\site-packages\Django\contrib\gis\gdal\libgdal.py, c'est à dire.

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

Pas de conséquences négatives pour l'instant.

5
keepAlive