web-dev-qa-db-fra.com

GeoDjango sous Windows: essayez de définir GDAL_LIBRARY_PATH dans vos paramètres.

Je l'ai déjà fait une douzaine de fois auparavant, mais quelque chose ne fonctionne pas cette fois-ci.

Après les docs:

https://docs.djangoproject.com/fr/1.11/ref/contrib/gis/install/#windows

J'essaie de configurer GeoDjango sur une machine Windows (celle-ci est une version virtuelle de Windows 10 configurée sur paperspace.com). Il semble y avoir un problème avec mes paramètres PATH, mais je ne peux pas comprendre ce que c'est. J'ai exécuté les commandes mises en évidence dans les instructions. J'ai vérifié mes variables PATH et tout semble aller pour le mieux. J'ai essayé de leur indiquer les versions 32 bits et 64 bits d'OSGeo4Win. Quoi qu'il en soit, je reçois à chaque fois la sortie suivante:

C:\Python\lib\site-packages\floppyforms\__init__.py:21: UserWarning: Unable to import floppyforms.gis, geometry widgets not available
  "Unable to import floppyforms.gis, geometry widgets not available")
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python\lib\site-packages\Django\core\management\__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "C:\Python\lib\site-packages\Django\core\management\__init__.py", line 337, in execute
    Django.setup()
  File "C:\Python\lib\site-packages\Django\__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Python\lib\site-packages\Django\apps\registry.py", line 108, in populate
    app_config.import_models()
  File "C:\Python\lib\site-packages\Django\apps\config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Python\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "C:\Python\lib\site-packages\Django\contrib\auth\models.py", line 4, in <module>
    from Django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "C:\Python\lib\site-packages\Django\contrib\auth\base_user.py", line 52, in <module>
    class AbstractBaseUser(models.Model):
  File "C:\Python\lib\site-packages\Django\db\models\base.py", line 124, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "C:\Python\lib\site-packages\Django\db\models\base.py", line 330, in add_to_class
    value.contribute_to_class(cls, name)
  File "C:\Python\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:\Python\lib\site-packages\Django\db\__init__.py", line 33, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "C:\Python\lib\site-packages\Django\db\utils.py", line 211, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "C:\Python\lib\site-packages\Django\db\utils.py", line 115, in load_backend
    return import_module('%s.base' % backend_name)
  File "C:\Python\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "C:\Python\lib\site-packages\Django\contrib\gis\db\backends\postgis\base.py", line 5, in <module>
    from .features import DatabaseFeatures
  File "C:\Python\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:\Python\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:\Python\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:\Python\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:\Python\lib\site-packages\Django\contrib\gis\db\models\fields.py", line 3, in <module>
    from Django.contrib.gis import forms, gdal
  File "C:\Python\lib\site-packages\Django\contrib\gis\forms\__init__.py", line 3, in <module>
    from .fields import (  # NOQA
  File "C:\Python\lib\site-packages\Django\contrib\gis\forms\fields.py", line 4, in <module>
    from Django.contrib.gis.geos import GEOSException, GEOSGeometry
  File "C:\Python\lib\site-packages\Django\contrib\gis\geos\__init__.py", line 5, in <module>
    from .collections import (  # NOQA
  File "C:\Python\lib\site-packages\Django\contrib\gis\geos\collections.py", line 11, in <module>
    from Django.contrib.gis.geos.geometry import GEOSGeometry, LinearGeometryMixin
  File "C:\Python\lib\site-packages\Django\contrib\gis\geos\geometry.py", line 11, in <module>
    from Django.contrib.gis import gdal
  File "C:\Python\lib\site-packages\Django\contrib\gis\gdal\__init__.py", line 28, in <module>
    from Django.contrib.gis.gdal.datasource import DataSource
  File "C:\Python\lib\site-packages\Django\contrib\gis\gdal\datasource.py", line 39, in <module>
    from Django.contrib.gis.gdal.driver import Driver
  File "C:\Python\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:\Python\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:\Python\lib\site-packages\Django\contrib\gis\gdal\libgdal.py", line 44, in <module>
    'GDAL_LIBRARY_PATH in your settings.' % '", "'.join(lib_names)
Django.contrib.gis.gdal.error.GDALException: Could not find the GDAL library (tried "gdal111", "gdal110", "gdal19", "gdal18", "gdal17"). Try setting GDAL_LIBRARY_PATH in your settings.

Quelqu'un a-t-il une idée?

MISE À JOUR: Je suis allé au magasin et j'ai acheté un nouvel ordinateur portable et je rencontre toujours le même problème. Pourrait-il s'agir d'un problème de gestion de version avec certaines des dépendances de GeoDjango? Je ne sais pas quoi faire, mais c'est une sorte d'urgence pour moi.

6
Adam Starrh

Le problème a fini par être une incompatibilité de version entre Django et GDAL . Django ne cherchait pas le nom de fichier correct (gdal202.dll dans mon cas). 

Pour le corriger, il m'a fallu ajouter str('gdal202') au fichier suivant, à la ligne 26:

(Python Root)\Lib\site-packages\Django\contrib\gis\gdal\libgdal.py

Si ce problème se reproduit, vous pouvez consulter votre répertoire OSGeo4W\bin pour déterminer le gdalxxx.dll que Django doit rechercher.

8
Adam Starrh

Ajouter

GDAL_LIBRARY_PATH = r'C:\OSGeo4W64\bin\gdal202'

aux paramètres Django a fonctionné pour moi

3
Saltanat Alikhanova

Si vous utilisez le didacticiel Django et installez GDAL via OSGeo4W, lorsque vous modifiez l'environnement Windows, assurez-vous d'avoir défini les versions appropriées de Python et OSGeo4W.

Par exemple, lors de l'installation d'OSGeo4W 64 bits, le chemin de l'environnement doit être défini:

set OSGEO4W_ROOT=C:\OSGeo4W64

et pour Python 3.5.2:

set PYTHON_ROOT=C:\Python36

Assurez-vous de ne pas confondre les installations Python d’une machine virtuelle avec le système Python.

Installez uniquement Django après vous avez correctement modifié l'environnement.

2
tmpbtz

En plus des commentaires précédents. Vous avez peut-être un [WinError 127] La ​​procédure spécifiée est introuvable.

Cela semble dû à plusieurs sqlite3.dll sur votre système. Si le chemin frappe les premiers, un conflit apparaît pour gdal202. 

Vous pouvez étendre les réponses adam starr en ajoutant également un changement de répertoire de travail.

#Set working directory to actual working directoy of gdal
#This is required to prevent any conflicts with older SQLITE versions, 
#f.e. in python path  
#Prevents error in GDAL 202
#BASE_WORKINGDIRECTORY to change it back later if you need to
BASE_WORKDIRECTORY = os.getcwd()
os.chdir(os.path.dirname(lib_path))

# This loads the GDAL/OGR C library
lgdal = CDLL(lib_path)
2
Mike - kentivo

Pour moi, ce problème a été résolu sur Windows en ajoutant simplement le chemin du package osgeo python aux variables d'environnement (C:\Python36\Lib\site-packages\osgeo). Il semble qu'après cela, Django ait réussi à trouver le fichier gdal202.dll.

1
Hakim

Solution:

  1. Installez GDAL à partir de la pip: pip install GDAL, si cela ne fonctionne pas, installez-le à partir de la roue: https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
  2. a) Si vous utilisez un environnement virtuel, ajoutez simplement ce code à settings.py : os.environ["PATH"] += os.pathsep + BASE_DIR + '\\venv\\Lib\\site-packages\\osgeo'

    b) Sinon, ajoutez ce code:

    from distutils.sysconfig import get_python_lib os.environ["PATH"] += os.pathsep + get_python_lib() + '\\osgeo'

Quand cela se produit, cela pose un problème comme celui-ci entrez la description de l'image ici

Peut-être que la bibliothèque dll (gdal202.dll) ne fonctionne pas. Afin que nous puissions remplacer la bibliothèque GDAL complète par GDAL-whl-package à partir de https://download.lfd.uci.edu/pythonlibs/ r5uhg2lo/GDAL-2.3.2-cp36-cp36m-win_AMD64.whl Téléchargez ce paquet whl, renommez-le en GDAL-2.3.2-cp36-cp36m-win_AMD64.whl.Zip entrez la description de l'image ici extrayez le dossier osgeo à un endroit (D:\ProgramData\osgeo) et modifiez le fichier GDAL_DATA PROJ_LIB et le chemin d'accès à son sous-dossier.

ce qui signifie changer l'environnement Windows de 

set OSGEO4W_ROOT=C:\OSGeo4W
set PYTHON_ROOT=C:\Python3X
set GDAL_DATA=%OSGEO4W_ROOT%\share\gdal
set PROJ_LIB=%OSGEO4W_ROOT%\share\proj
set PATH=%PATH%;%PYTHON_ROOT%;%OSGEO4W_ROOT%\bin
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /f /d "%PATH%"
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v GDAL_DATA /t REG_EXPAND_SZ /f /d "%GDAL_DATA%"
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROJ_LIB /t REG_EXPAND_SZ /f /d "%PROJ_LIB%"

à

set OSGEO4W_ROOT=D:\ProgramData\osgeo
set PYTHON_ROOT=C:\Python3X
set GDAL_DATA=%OSGEO4W_ROOT%\data\gdal
set PROJ_LIB=%OSGEO4W_ROOT%\data\proj
set PATH=%PATH%;%PYTHON_ROOT%;%OSGEO4W_ROOT%\bin
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /f /d "%PATH%"
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v GDAL_DATA /t REG_EXPAND_SZ /f /d "%GDAL_DATA%"
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROJ_LIB /t REG_EXPAND_SZ /f /d "%PROJ_LIB%"

PS: n'oubliez pas de renommer "D:\ProgramData\osgeo\gdal203.dll" en "D:\ProgramData\osgeo\gdal202.dll"

0
蒙古海军司令