[gdal-dev] VRT derived band pixel functions written in Python

Even Rouault even.rouault at spatialys.com
Mon Sep 12 09:39:57 PDT 2016


Le lundi 12 septembre 2016 16:59:34, Poughon Victor a écrit :
> Hi Even,
> 
> This is a really cool and really impressive feature!
> Calling Python code from C++ without development packages as a dependency
> sounds like black magic to me.

No black magic. Just setting function pointers using dlopen() :
https://github.com/OSGeo/gdal/blob/trunk/gdal/frmts/vrt/vrtderivedrasterband.cpp#L390

> Obviously Python symbols have to be there
> at some point to execute Python code, so this is only usable from a binary
> that happens to load them already (CPython, QGIS, etc.), correct?

No, there are 2 modes:
- GDAL is loaded after something else has already loaded python (so your 
CPython, QGIS)
- GDAL cannot find any python symbols in the already available symbols of the 
process, in which case it wil try to load a few reasonable shared objects like 
"libpython2.7.so", etc...

See 
https://github.com/OSGeo/gdal/blob/trunk/gdal/frmts/vrt/vrtderivedrasterband.cpp#L238 
and below lines

> But I'm confused because later you mention
> incompatibilities issues between the CPython and Pypy API. GDAL's secret
> sauce, I guess...?

Nothing GDAL specific here. It is just that the way to embed PyPy from C is 
completely different from CPython :

http://doc.pypy.org/en/latest/embedding.html
vs
https://docs.python.org/2/extending/embedding.html

> I'm also curious why it's possible to use numba but no
> pypy, which AFAIK are both python JITs?

numba is "just" a CPython extension (a non-trivial one dragging llvmlite 
etc...), so once you support CPython, it comes for free to use it, provided 
you use the right import and function decorations in your python code.

> And finally did you consider using
> Cython (which claims pypy compatibility)?

No, I didn't investigate that.

Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the gdal-dev mailing list