我在哪里可以下载grass.scripts和/或grass.pygrass?
我正在尝试学习如何用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 个回答
我现在还不太确定自己是否完全理解,但我似乎已经克服了这个难关。我使用了这个链接中的脚本(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
我运行了以下脚本(这个脚本来自于 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
,但意思是一样的。这些文件已经在你的系统上了,不需要下载。这就是设置 PYTHONPATH
为 C:\GRASS-64\etc\python
的目的。
这个是像其他的python模块(比如matplotlib、numpy、scipy等)一样的吗,还是说它是Grass内部的模块?
嗯,它并不完全是“Grass内部的”,但它是和Grass一起分发的,而不是作为一个单独的模块。