TL;DR
Yo no puede tener una instalación de la versión gratuita de GDAL/OGR a trabajar desde dentro de ArcMap 10.0. Puedo obtener un ImportError: DLL load failed
a _mod = imp.load_module('_gdal', fp, pathname, description)
.
A continuación, más detalles sobre el contexto y un procedimiento sobre cómo reproducir el error.
Alguien en los comentarios especificado que arcpy y GDAL funcionan bien juntos en su máquina. ¿Cuáles podrían ser las diferencias entre nuestras configuraciones (software instalado, variables de entorno, ...)?
Descripción de mi problema
Lo que estoy tratando de hacer...
Quiero implementar un ArcMap 10.0 caja de herramientas con scripts que utilizan las bibliotecas externas. Me gustaría evitar tener cualquier manipulación que se hace en el lado del usuario: idealmente, ninguna instalación adicional/manipulación debe ser requerido por el usuario. Por esa razón, puedo incluir a las bibliotecas de los archivos dentro de la caja de herramientas.
Lo que mi problema es...
Cuando trato de usar gdal/ogr de osgeo junto con arcpy, me sale el siguiente error:
Traceback (most recent call last):
File "path_to_script\debugDepl.py", line 32, in <module>
from osgeo import ogr
File "path_to_script\osgeo\__init__.py", line 30, in <module>
_gdal = swig_import_helper()
File "path_to_script\osgeo\__init__.py", line 26, in swig_import_helper
_mod = imp.load_module('_gdal', fp, pathname, description)
ImportError: DLL load failed: The specified procedure could not be found.
Hay algunos unión errores que no entiendo. Parece que hay un conflicto entre arcpy y gdal/ogr (más información a continuación)
Relacionado con:
- GDAL enlaces problema con ArcMap 10.1 herramienta de Python
- gdal ImportError en python en Windows
- Conflicto de arcpy (Arc 10) y gdal?
- Ejecución de GDAL y arcpy juntos
- Cómo ejecutar OGR en ArcGIS Scripts?
Cómo reproducir el error
Si usted me puede ayudar a lograr quiero quiero, puede ser útil si me explique cada paso que conducen a este error. He intentado detallar tanto como pude para que usted pueda reproducirlo.
1/ En un Windows 7 de 64 bits de la máquina, Instalar ArcGIS Desktop 10.0 (32 bits)
2/ Descargar GDAL-1.11.0.win32-py2.6.exe binarios de Windows
3/ Instalar la biblioteca con su instalación de Python
4/ Mover la asociada archivos de biblioteca (path_to_python_install\Python26\ArcGIS10.0\Lib\site-packages
) a otra carpeta nueva (osgeo carpeta + varios archivos de Python)
5/ Crear una secuencia de comandos de Python en esa carpeta y editar en su favorito de Python editor y comprobar que se puede importar gdal/ogr
from osgeo import gdal
from osgeo import ogr
6/ Trate de la importación de arcpy de la secuencia de comandos antes y después de la importación de gdal/ogr
from osgeo import ogr
from osgeo import gdal
import arcpy
Que debería de funcionar, ahora a tratar de la otra manera
import arcpy
# Maybe some environment variable settings
from osgeo import ogr
from osgeo import gdal
Y que versión debería crear el error.
7/ Crear una caja de herramientas (o llame a la secuencia de comandos desde dentro de ArcMap) con la versión que trabajó de forma independiente. Y tratar de ejecutarlo dentro de ArcMap (falla).
Notas sobre los pasos
1/ he encontrado algunos oficial de Python bindings pero sólo para ArcMap 10.1
2/ Esta distribución incluye un completo GDAL de la instalación. Es una versión de 32 bits para mi versión de 32 bits de Python26.
4/ Como se especifica en estas recomendaciones para los scripts de implementación, que debo copiar los archivos de la biblioteca directamente. Quiero evitar que el usuario tenga que instalar las cosas tanto como sea posible
5/ Esto puede (o no) de requerir alguna configuración de variables de entorno:
import os
environList = os.environ['PATH'].split(';')
environList.insert(0, r'path_to_folder\osgeo')
os.environ['PATH'] = ';'.join(environList)
os.environ['GDAL_DATA'] = r'path_to_folder\osgeo\data\gdal'
GDAL Documentación especifica que se debe:
- Agregar el directorio bin de la carpeta a la RUTA del sistema, recuerda poner un punto y coma delante de ella antes de agregar a la ruta existente.
- Crear un nuevo usuario o variable de sistema con los datos de la carpeta de tu instalación.
Los desarrolladores en esta página del blog parecía tener ese error cuando las variables de entorno son incorrectas.
6/ parece que, por alguna razón, si la importación de arcpy primera y ogr/gdal segundo, gdal ya no es capaz de encontrar la dll que se requiere. Esto podría haber sido debido a una cierta configuración de variables de entorno, pero la modificación propuesta en el paso 5) no cambiar nada.
7/ Pero mi conjetura es que arcpy se importan automáticamente (primero) así que estamos de vuelta a la versión 2 de 6)
Algo más de información acerca de mi intento de entender lo que está pasando
De PyScripter:
>>> from osgeo import gdal
>>> gdal.__file__
'C:\\Python26\\ArcGIS10.0\\lib\\site-packages\\osgeo\\gdal.pyc'
>>> import arcpy
>>> arcpy.__file__
'C:\\Program Files (x86)\\ArcGIS\\Desktop10.0\\arcpy\\arcpy\\__init__.pyc'
Bien, los archivos de la biblioteca se encuentra en el lugar donde se supone que deben ser. Pero entonces...
>>> import arcpy
>>> from osgeo import gdal
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python26\ArcGIS10.0\lib\site-packages\osgeo\__init__.py", line 29, in <module>
_gdal = swig_import_helper()
File "C:\Python26\ArcGIS10.0\lib\site-packages\osgeo\__init__.py", line 25, in swig_import_helper
_mod = imp.load_module('_gdal', fp, pathname, description)
ImportError: DLL load failed: The specified procedure could not be found.
Tal vez algo que sucedió a las variables de entorno o a la de python path cuando la importación de Arcpy? Bueno, parece que no...
>>> import os
>>> import sys
>>> envBefore = os.environ
>>> pyPathBefore = sys.path
>>> import arcpy
>>> envAfter = os.environ
>>> pyPathAfter = sys.path
>>> envBefore == envAfter
True
>>> pyPathBefore == pyPathAfter
True
Gracias por llegar al final de ese largo post.