[GRASS-user] Error import from grass.pygrass.vector library

Manuele Pesenti manuele.pesenti at gter.it
Tue Aug 24 01:53:07 PDT 2021


---- Attivato mar, 24 ago 2021 10:10:10 +0200 Stefan Blumentrath <Stefan.Blumentrath at nina.no> ha scritto ----




Hm…

 

Did you initialize the session, e.g. like:

 

with Session(gisdb="/tmp", location="location", create_opts="EPSG:4326"):

    from grass.pygrass.vector import Vector







Yes it's exactly what I do, the strange fact is that I can by-pass the exception assigning the LD_LIBRARY_PATH value before running the script even if even now before importing vector lib this env variable has the correct value exactly thanks to the grass_session lib import...



so the script modified as you suggested reported here under still raise the exception



# -*- coding: utf-8 -*-



import os, sys



GISBASE = '/usr/lib/grass78'

GRASSBIN = '/usr/bin/grass78'



# Define GRASS-Python environment

os.environ['GISBASE'] = GISBASE



os.environ['GRASSBIN'] = GRASSBIN



sys.path.append(os.path.join(GISBASE, "etc", "python"))



from grass_session import Session

import grass.script as gs



print(f"LD_LIBRARY_PATH: {os.environ['LD_LIBRARY_PATH']}")

print(f"GRASSBIN: {os.environ['GRASSBIN']}")



with Session(gisdb="/tmp", location="location", create_opts="EPSG:4326"):



    from grass.pygrass.vector import Vector



print('DONE!')





while the old script (for convenience reported here under) runned as 



$ LD_LIBRARY_PATH=$(grass78 --config path)/lib python import_test.py 

LD_LIBRARY_PATH: /usr/lib/grass78/lib

GRASSBIN: /usr/bin/grass78

DONE!



returns just what printed in the script without raising the exception.



# -*- coding: utf-8 -*-



import os, sys



GISBASE = '/usr/lib/grass78'

GRASSBIN = '/usr/bin/grass78'



# Define GRASS-Python environment

os.environ['GISBASE'] = GISBASE



os.environ['GRASSBIN'] = GRASSBIN



sys.path.append(os.path.join(GISBASE, "etc", "python"))



# from grass_session import Session

import grass.script as gs



print(f"LD_LIBRARY_PATH: {os.environ['LD_LIBRARY_PATH']}")

print(f"GRASSBIN: {os.environ['GRASSBIN']}")



# with Session(gisdb="/tmp", location="location", create_opts="EPSG:4326"):



from grass.pygrass.vector import Vector



print('DONE!')



Cheers



    Manuele



 

 

Cheers

Stefan

 

From: grass-user <mailto:grass-user-bounces at lists.osgeo.org> On Behalf Of Manuele Pesenti
 Sent: tirsdag 24. august 2021 09:38
 To: Grass User <mailto:grass-user at lists.osgeo.org>
 Subject: Re: [GRASS-user] Error import from grass.pygrass.vector library


 

 


Drear Stefan,
 thanks for your quick reply but the solution is not so clear, I already use grass_session library even if not reported in the attached example, how can it helps with the issue? Just import the vector library after the session is loaded does not solve as far
 as I've tested.
 
 Cheers
 
     Manuele
 

---- Attivato ven, 20 ago 2021 21:26:22 +0200 Stefan Blumentrath <mailto:Stefan.Blumentrath at nina.no> ha scritto ----


 

Dear Manuele,

 

For ctypes in pygrass, the C-libraries need to be loaded explicitly.

 

You could have a look here:

https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fzarch%2Fgrass-session%2Fblob%2F6097f834be20ee0d703deb2af90f22d6dc66f368%2Fgrass_session%2Fsession.py%23L332&data=04%7C01%7C%7C5490515dd62a4bc57acf08d966d433e6%7C6cef373021314901831055b3abf02c73%7C0%7C0%7C637653884462405890%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=V0ecwomhbdvobU2B3tal1udBRXj5jkvWwN9e4K0dKSw%3D&reserved=0

to see how it can be done, or just use the grass_session python library (pip install grass-session) for convenience…

 

Cheers

Stefan

 

From: grass-user <mailto:grass-user-bounces at lists.osgeo.org> On Behalf Of Manuele Pesenti
 Sent: fredag 20. august 2021 16:40
 To: grass-user <mailto:grass-user at lists.osgeo.org>
 Subject: [GRASS-user] Error import from grass.pygrass.vector library


 

Dear All,


 


I'm moving my first steps on the development of a python script that uses Grass, but I cannot import from the grass.pygrass.vector library.


I work on a Ubuntu/Linux environment and I've installed grass using apt, this is the test script I'm currently running:


 


# -*- coding: utf-8 -*-


 


import os, sys


 


GISBASE = '/usr/lib/grass78'


GRASSBIN = '/usr/bin/grass78'


 


# Define GRASS-Python environment


os.environ['GISBASE'] = GISBASE


 


os.environ['GRASSBIN'] = GRASSBIN


 


sys.path.append(os.path.join(GISBASE, "etc", "python"))


 


from grass_session import Session


import grass.script as gs


 


print(f"LD_LIBRARY_PATH: {os.environ['LD_LIBRARY_PATH']}")


print(f"GRASSBIN: {os.environ['GRASSBIN']}")


 


from grass.pygrass.vector import Vector


 


print('DONE!')


 


and this is the output:


 


$ python import_test.py 


LD_LIBRARY_PATH: /usr/lib/grass78/lib


GRASSBIN: /usr/bin/grass78


Traceback (most recent call last):


  File "/usr/lib/grass78/etc/python/grass/lib/ctypes_loader.py", line 76, in load


    return ctypes.cdll.LoadLibrary(path)


  File "/usr/lib/python3.9/ctypes/__init__.py", line 452, in LoadLibrary


    return self._dlltype(name)


  File "/usr/lib/python3.9/ctypes/__init__.py", line 374, in __init__


    self._handle = _dlopen(self._name, mode)


OSError: libgrass_datetime.7.8.so: cannot open shared object file: No such file or directory


 


During handling of the above exception, another exception occurred:


 


Traceback (most recent call last):


  File "/home/manuele/Lavoro/ETS/ETSCore/scripts/import_test.py", line 21, in <module>


    from grass.pygrass.vector import Vector


  File "/usr/lib/grass78/etc/python/grass/pygrass/vector/__init__.py", line 5, in <module>


    import grass.lib.gis as libgis


  File "/usr/lib/grass78/etc/python/grass/lib/gis.py", line 23, in <module>


    _libs["grass_gis.7.8"] = load_library("grass_gis.7.8")


  File "/usr/lib/grass78/etc/python/grass/lib/ctypes_loader.py", line 62, in load_library


    return self.load(path)


  File "/usr/lib/grass78/etc/python/grass/lib/ctypes_loader.py", line 78, in load


    raise ImportError(e)


ImportError: libgrass_datetime.7.8.so: cannot open shared object file: No such file or directory



 


Thank you very mutch for any help


 


Cheers


 


      Manuele


 


 


 



 





 



 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-user/attachments/20210824/875a121c/attachment-0001.html>


More information about the grass-user mailing list