2010-10-04 5 views
4

Je construis mon premier projet GeoDjango mais je suis un peu désespéré.libgeos_c-1.dll ne peut pas être chargé par Python

Jev a installé PostgreSQL 9 et PostGis 1.5 en installant un clic sur Windows. Donc, tout est là. J'ai mis GEOS_LIBRARY_PATH au chemin complet de libgeos_c-1.dll dans settings.py. Mais quand je lance syncdb manage.py, je rencontre les erreurs suivantes:

File "C:\Python25\lib\site-packages\django\contrib\gis\geometry\backend\geos.py", line 1, in <module> 
    from django.contrib.gis.geos import \ 
    File "C:\Python25\Lib\site-packages\django\contrib\gis\geos\__init__.py", line 6, in <module> 
    from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex 
    File "C:\Python25\Lib\site-packages\django\contrib\gis\geos\geometry.py", line 14, in <module> 
    from django.contrib.gis.geos.coordseq import GEOSCoordSeq 
    File "C:\Python25\Lib\site-packages\django\contrib\gis\geos\coordseq.py", line 9, in <module> 
    from django.contrib.gis.geos.libgeos import CS_PTR 
    File "C:\Python25\lib\site-packages\django\contrib\gis\geos\libgeos.py", line 51, in <module> 
    lgeos = CDLL(lib_path) 
    File "C:\Python25\lib\ctypes\__init__.py", line 348, in __init__ 
    self._handle = _dlopen(self._name, mode) 
WindowsError: [Error 126] The specified module could not be found 

J'ouvre libgeos.py et vérifier la ligne spécifiée. C'est juste un simple "CDLL (lib_path)". Apparemment, lib_path est GEOS_LIBRARY_PATH.

Je crée donc un test simple:

from ctypes import CDLL 

lgeos = CDLL('libgeo's path') 

ont toujours le même problème. Il n'est donc tout simplement pas possible d'utiliser CDLL pour charger cette DLL du tout avec python. À ce stade, je ne sais pas quoi faire. S'il vous plaît aider.

Répondre

0

Même problème ici. Pourriez-vous être assez aimable pour partager la bonne DLL? Si cela résout effectivement le problème. Ou est-ce que l'installation de OSGeo4W est la seule solution? Si oui, quelle procédure d'installation avez-vous suivie?

+1

Résolus en saisissant la librairie libgeos du site spatialite et en décompressant les deux dll en system32. –

+0

Peut-être que c'est une autre solution. Je suppose que la dernière version de libgeo sur Windows a un problème? –

+0

Je viens d'installer OSGeo4W et l'ai résolu. –

1

Différentes choses me viennent à l'esprit, la plus évidente étant: Vous avez collé le chemin du fichier DLL, pas seulement le dossier dans lequel il réside? Aucune offense signifiée, juste pour être du bon côté.

Ensuite, vous pouvez également obtenir cette erreur s'il existe des dépendances non résolues, c'est-à-dire que la bibliothèque LoadLibrary de la DLL échoue car il lui manque une autre bibliothèque dont elle dépend. Vous pouvez facilement trouver cela en utilisant Dependency Walker. Chargez libgeos avec depend et cherchez les modules manquants, les messages d'erreur, etc. - vous pourriez manquer libgeos-X-Y-Z.dll, par exemple.

+0

Je collé le chemin complet, c'est le dossier + nom de fichier. Je viens d'utiliser Dependecy Walker pour vérifier la dépendance de LIBGEOS_C-1.DLL. En dehors de certaines DLL système, le seul dont il dépend est LIBGEOS-3-2-2.DLL qui se trouve à côté de lui. Donc clairement, pas de modules manquants. Je pense que c'est la façon dont le chargement de dll est changé pour les lates libgeos. Parce que après avoir téléchargé et installé OSGeo4W, j'ai inclus le fichier geos dll dans ce logiciel, puis cela a fonctionné. Mais je ne suis pas sûr si cela va introduire des incohérences dans le futur –

+0

pas besoin de coller les chemins exacts si vous utilisez ctypes.util.find_library – dcolish

3

Aparently après la variable set GEOS_LIBRARY_PATH en utilisant doble « \ » barres obliques fonctionne pour moi, mais lance maintenant cette erreur objet « module » n'a pas d'attribut « OSMGeoAdmin »

2

Je viens de lancer le même problème après l'installation Postgresql 9.1 et postgis 2.0 via les installateurs Windows. Pas besoin de télécharger quoi que ce soit d'autre. Tout ce que vous avez à faire est d'ajouter ce répertoire dans le chemin Windows: C:\PostgreSQL\9.1\bin ou partout où le fichier libgeos_c-1.dll vit. Vous devrez peut-être redémarrer si vous voulez que les nouvelles variables d'environnement prennent effet pour votre IDE. Pour les lignes de commande, ouvrez une nouvelle invite de commande.

En procédant ainsi, le paramètre GEOS_LIBRARY_PATH est facultatif car les fichiers requis se trouvent déjà dans le chemin Windows.

Cela peut ne pas avoir fonctionné pour l'OP en 2010, mais pour d'autres qui rencontrent le même problème en 2012, c'est probablement la solution la plus simple.

+0

Cela fonctionne. Tout ce que j'avais à faire était de prendre le fichier libgeos_c-1.dll et de le déposer dans mon projet django. – stormlifter

0

J'ai eu le même problème et résolu par:

  1. Réinstaller http://trac.osgeo.org/osgeo4w/ (mon dossier d'installation est C:\OSGeo4W64\)
  2. ajoutant la ligne:

    GEOS_LIBRARY_PATH = « C: \ OSGeo4W64 \ bin \ geos_c.dll »

à paramètres.py

(suivant cette réponse: https://stackoverflow.com/a/21495785/2314737)

Ceci est également mentionné dans le official documentation:

When GeoDjango can’t find GEOS, this error is raised:

ImportError: Could not find the GEOS library (tried "geos_c"). Try setting GEOS_LIBRARY_PATH in your settings. The most common solution is to properly configure your Library environment settings or set GEOS_LIBRARY_PATH in your settings.

Questions connexes