2

我正在尝试学习如何编写一些脚本以使用 Python 在外部运行 Grass,但我似乎什至找不到此类脚本所需的基本模块。我看到的所有文档都描述了使用 Grass.scripts 模块,但我不知道在哪里下载它。我还看到了有关grass.pygrass 的一些信息,但我也找不到。

我想也许它是内置到较新版本的 Grass 中的,所以我刚刚下载了 7.0.0 beta2 并且我仍然找到了 Grass.scripts 文件。这是像其他模块(matploblib、numpy、scipy 等)一样的 python 模块还是 Grass 内部的?很抱歉有补救问题,但我在这里迷路了。

我运行了以下脚本(取自http://grasswiki.osgeo.org/wiki/GRASS_and_Python,并在我运行 Python 2.7 后添加了引号)

GISBASE= 'C:\GRASS-64'
GISRC= 'C:\Documents and Settings\user\.grassrc6'
LD_LIBRARY_PATH= 'C:\GRASS-64\lib'
PATH= 'C:\GRASS-64\etc;C:\GRASS-64\etc\python;C:\GRASS-64\lib;C:\GRASS-64\bin;C:\GRASS-64\extralib;C:\GRASS-64\msys\bin;C:\Python26;'
PYTHONLIB= 'C:\Python26'
PYTHONPATH= 'C:\GRASS-64\etc\python'
GRASS_SH= 'C:\GRASS-64\msys\bin\sh.exe'

很好(虽然我不知道它是做什么的)但是当我添加

from grass.pygrass.modules import Module

它返回

ImportError: No module named gras.pygrass.modules

通常我会下载并安装模块,问题会得到解决,但我在任何地方都找不到。

4

2 回答 2

0

我仍然不确定我是否了解所有内容,但我似乎已经过了这个障碍。我使用了来自( https://gis.stackexchange.com/questions/89452/problem-with-python-script-to-control-grass-gis-from-outside-how-to-import-gra/90160#的脚本90160)并更改了所有相关路径信息以适应我的安装,显然,现在可以访问 Grass.script 模块。这是我的工作脚本

import os
import sys

gisbase = os.environ['GISBASE'] = 'C:\program files\grass gis 6.4.3'  #GISBASE needs to point the root of the GRASS installation directory
gisrc = 'C:\grassdata'
gisdbase = 'C:\grassdata'
location = 'newLocation'
mapset = 'TC'
LD_LIBRARY_PATH = 'C:\program files\grass gis 6.4.3\lib'
PATH = 'C:\program files\grass gis 6.4.3\etc';'C:\program files\grass gis 6.4.3\etc\python';'C:\program files\grass gis 6.4.3\lib';'C:\program files\grass gis 6.4.3\bin';'C:\Python27';'C:\program files\grass gis 6.4.3\Python27';'C:\program files\grass gis 6.4.3\msys'
PYTHONLIB = 'C:\Python27'
PYTHONPATH = 'C:\program files\grass gis 6.4.3\etc\python'
GRASS_SH = 'C:\OSGeo4W64\apps\msys\bin\sh.exe'


sys.path.append(os.path.join(os.environ['GISBASE'], 'etc', 'python'))

import grass.script as grass
于 2014-07-30T17:03:35.043 回答
0

我运行了以下脚本(取自http://grasswiki.osgeo.org/wiki/GRASS_and_Python,并在我运行 Python 2.7 后添加了引号)

GISBASE= 'C:\GRASS-64'
GISRC= 'C:\Documents and Settings\user\.grassrc6'
LD_LIBRARY_PATH= 'C:\GRASS-64\lib'
PATH= 'C:\GRASS-64\etc;C:\GRASS-64\etc\python;C:\GRASS-64\lib;C:\GRASS-64\bin;C:\GRASS-64\extralib;C:\GRASS-64\msys\bin;C:\Python26;'
PYTHONLIB= 'C:\Python26'
PYTHONPATH= 'C:\GRASS-64\etc\python'

我不知道您为什么认为 Python 2.7 需要您添加引号。它没有。

但它确实需要您将所有这些替换Python26Python27. 这很容易成为你的问题。你没有任何东西在C:\Python26

如果你在其他地方安装了 Grass,C:\GRASS-64你显然也需要改变它。(从文件的其他地方,我感觉是64指版本 6.4,而不是 64 位或其他版本,并且您已经下载了 7.0.0,所以我怀疑它已安装到类似的东西C:\GRASS-70。)


或者它可能是这样的:

ImportError: No module named gras.pygrass.modules

如果你 importgras.pygrass.modules而不是grass.pygrass.modules,那显然是行不通的。


此外,您是否真的在用于启动 Python 的同一窗口中运行该脚本cmd.exe?如果没有,它不会有帮助。


同时:

我看到的所有文档都描述了使用 Grass.scripts 模块,但我不知道在哪里下载它。

您链接到的文档回答了该问题,尽管对于新手来说可能并不明显(一旦您弄清楚这一点,您可能想建议上游的文档改进):

相关文件位于$GISBASE/etc/python/grass/script/*.py.

当然,在 Windows 上,这$GISBASE并不完全正确。它实际上是%GISBASE%,这有点像C:\GRASS-64,但它是同一件事。这些文件已经在您的系统上;没有什么可下载的。这就是设置PYTHONPATHC:\GRASS-64\etc\python.

这是像其他模块(matploblib、numpy、scipy 等)一样的 python 模块还是 Grass 内部的?

好吧,它并不完全是“Grass 内部的”,而是与 Grass 一起分发的,而不是作为一个单独的模块。

于 2014-07-29T18:44:37.957 回答