[GRASS-dev] [GRASS GIS] #2424: PyGRASS does not work when GRASS is invoked from outside

GRASS GIS trac at osgeo.org
Sun Oct 5 22:23:01 PDT 2014


#2424: PyGRASS  does not work when GRASS is invoked from outside
------------------------------------------------------+---------------------
 Reporter:  wenzeslaus                                |       Owner:  grass-dev@…              
     Type:  defect                                    |      Status:  new                      
 Priority:  normal                                    |   Milestone:  7.0.0                    
Component:  Python ctypes                             |     Version:  svn-trunk                
 Keywords:  installation, pygrass, temporal, scripts  |    Platform:  MSWindows 8              
      Cpu:  Unspecified                               |  
------------------------------------------------------+---------------------

Comment(by zarch):

 Replying to [comment:2 wenzeslaus]:
 > Another case when I'm hitting this issue is in running tests.
 > There is a script which runs the tests. I import form gunittest
 > in this test and I don't really need much but in __init__.py
 > I import some things to provide and easy access, so whatever
 > I want to import, __init__.py gets executed, because pygrass.modules
 > are used this executes the pygrass main __init__.py which imports
 > some PyGRASS things which depend on ctypes interface and when
 > dynamic libraries are not available, this obviously fails.
 > This is an example, how simple you may need dynamic libraries.
 > Temporal framework Python API is probably the same case.

 Since the pygrass.modules does not depend from the ctypes, I think we
 could move the modules stuff outside pygrass to remove the depedencies to
 ctypes...

 The main problem is that I put in pygrass.__init__:

 {{{
 import grass.lib.gis as _libgis
 _libgis.G_gisinit('')
 }}}

 Because all the pygrass sub-modules: gis, raster, vector and functions
 must have G_gisinit,
 If you think that move the pygrass.modules outside pyrass is not a good
 idea, I can move the G_gisinit from the main __init__ of pygrass to the
 sub-modules.


 > Another way how to improve the situation is to use
 > empty __init__.py files.

 Generally I'm not against to an empty or almost empty init file.
 So If you agree on that, I could change it.

 This it will change the way as we import stuff, so it wont be possible to
 import:

 {{{
 from grass import pygrass

 # and then access to the sub-modules
 pygrass.modules.Module
 }}}

 For me it is not a problem, generally I import the class that I need on
 the top, like:

 {{{
 from grass.pygrass.modules import Module
 }}}

 In any case I think that the pygrass.modules.__init__ should contain at
 least:

 {{{
 from grass.pygrass.modules.interface.module import Module,
 ParallelModuleQueue
 }}}

 just to make the use of these classes more convenient and to "hide" the
 internal structure:

 {{{
 modules/
   interface/
     module.py
     ...
 }}}

 Otherwise it became too verbose.

-- 
Ticket URL: <http://trac.osgeo.org/grass/ticket/2424#comment:4>
GRASS GIS <http://grass.osgeo.org>



More information about the grass-dev mailing list