我在哪里可以下载grass.scripts和/或grass.pygrass?

2 投票
2 回答
3646 浏览
提问于 2025-04-18 15:13

我正在尝试学习如何用Python编写脚本来外部运行Grass,但我找不到这个脚本所需的基本模块。我看到的所有文档都提到使用grass.scripts模块,但我不知道在哪里下载这个模块。我还看到一些关于grass.pygrass的信息,但我也找不到这个。

我想也许这个模块是新版本Grass自带的,所以我下载了7.0.0 beta2版本,但我还是找不到grass.scripts文件。这个模块是像其他的Python模块(比如matplotlib、numpy、scipy等)一样的吗,还是说它是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

通常我会下载并安装这个模块,问题就能解决,但我到处都找不到它。

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
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需要加引号,其实并不需要。

不过,你确实需要把所有的 Python26 替换成 Python27。这可能就是你遇到的问题。你在 C:\Python26 这个地方什么都没有。

而且如果你把Grass安装在了 C:\GRASS-64 以外的地方,那你显然也需要修改这个路径。(从文件的其他部分来看,我觉得 64 是指版本6.4,而不是说是64位之类的,你下载的是7.0.0,所以我怀疑它被安装在了类似 C:\GRASS-70 的地方。)


或者可能是这个原因:

ImportError: No module named gras.pygrass.modules

如果你导入的是 gras.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 的目的。

这个是像其他的python模块(比如matplotlib、numpy、scipy等)一样的吗,还是说它是Grass内部的模块?

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

撰写回答