Verwenden Sie ArcPy- und PyGRASS-Tools in demselben Python-Skript?

10

Ich versuche, ein Python-Skript zu schreiben, das verschiedene ArcPy / ArcGIS-Befehle enthält, und möchte es mit GRASS-Geoverarbeitungswerkzeugen kombinieren.

Leider funktioniert das Importieren der GRASS-Bibliotheken nicht.

import grass.script as grass

endet mit einem Fehler:

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
ImportError: No module named script

Ich weiß, dass GRASS GIS eine eigene Python-Version installiert. Gibt es keine Möglichkeit, die ArcGIS- und die GRASS GIS-Installation von Python zu kombinieren? Ich habe versucht, das Pygrass-Modul (oder was ich dachte, könnte es sein) in den Ordner C: \ Python26 \ ArcGIS10.0 \ Lib \ site-packages \ zu kopieren. Ich erhalte eine andere Fehlermeldung, aber es funktioniert immer noch nicht.

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Python26\ArcGIS10.0\lib\site-packages\grass\script\__init__.py", line 1, in <module>
    from core   import *
  File "C:\Python26\ArcGIS10.0\lib\site-packages\grass\script\core.py", line 38, in <module>
    gettext.install('grasslibs', os.path.join(os.getenv("GISBASE"), 'locale'))
  File "C:\Python26\ArcGIS10.0\lib\ntpath.py", line 96, in join
    assert len(path) > 0
TypeError: object of type 'NoneType' has no len()

Ich verwende ArcGIS 10 und GRASS 6.4.2 auf einem Windows 7 64-Bit-Computer.

Martin
quelle

Antworten:

6

Höchstwahrscheinlich hat die Grasversion von Python ihre eigenen Python-Bindungen in einem Gras-spezifischen Site-Paket installiert. Eine nicht ideale Option wäre, vor dem Import Folgendes hinzuzufügen grass.script:

import sys
sys.path.append('\path\to\grass\bindings.py')

Dazu wird vorübergehend Gras hinzugefügt, $PYTHONPATHdamit Ihre ArcGIS10.0-Python-Installation es bei der Suche nach Importen findet.

Jay Laura
quelle
Hey Jay, danke für deinen Tipp. Ich denke, der jeweilige Ordner ist ... / etc / python / grass / script /. Muss ich auf eine bestimmte .py-Datei oder auf alle verweisen?
Martin
1
Ja, wenn ich zum Beispiel die GDAL-Bindungen aus einem anderen Ordner hinzufügen möchte, muss ich sie verwenden python_install/site-packages/osgeo/gdal.py. Existiert ein grass.pySkript im grassVerzeichnis?
Jay Laura
Es gibt mehrere .py-Dateien, leider keine mit einem eindeutigen Namen wie grass.py. Ich habe versucht, alle zu referenzieren. Leider funktioniert es immer noch nicht. :-(
Martin
1
Hmmm ... noch eine Idee, die Sie ausprobieren sollten: Es sieht so aus, als könnten Sie GRASS installieren, ohne die mitgelieferte Python zu verwenden, wie im verlinkten Beitrag beschrieben. Versuchen Sie vielleicht eine Neuinstallation und zwingen Sie GRASS, die Arc-Python-Installation zu verwenden? lists.osgeo.org/pipermail/grass-user/2012-June/065178.html
Jay Laura
1
Ich habe Sie nach Pygrass gefragt, aber vielleicht ist dieser Beitrag trotzdem von Interesse. Es geht um bogenförmige Bindungen für gdal. arcgis.com/home/item.html?id=1eec30bf5fa042a5a2227b094db89441
Dango