<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">I am trying to wrap my head around grass initialization, which unfortunately is not that easy, so bear with me if I ask something stupid.</p>
<p style="margin:0px 0px 1.2em!important">In <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">grass/script/setup.py</code> there is a function called <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">set_gui_path()</code>:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">def set_gui_path():
    """Insert wxPython GRASS path to sys.path."""
    gui_path = os.path.join(os.environ['GISBASE'], 'gui', 'wxpython')
    if gui_path and gui_path not in sys.path:
        sys.path.insert(0, gui_path)
</code></pre><p style="margin:0px 0px 1.2em!important">As you can see it has a very specific side-effect, i.e. it adds <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">GISBASE/gui/wxpython</code> to <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">sys.path</code>.</p>
<p style="margin:0px 0px 1.2em!important">This function was introduced in <a href="https://trac.osgeo.org/grass/changeset/67310">67310</a> and is being called in a bunch of gui/wxpython modules:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">gui/wxpython/photo2image/<a href="http://g.gui.photo2image.py">g.gui.photo2image.py</a> 
gui/wxpython/image2target/<a href="http://g.gui.image2target.py">g.gui.image2target.py</a> 
gui/wxpython/gmodeler/<a href="http://g.gui.gmodeler.py">g.gui.gmodeler.py</a> 
gui/wxpython/timeline/<a href="http://g.gui.timeline.py">g.gui.timeline.py</a> 
gui/wxpython/rlisetup/<a href="http://g.gui.rlisetup.py">g.gui.rlisetup.py</a> 
gui/wxpython/vdigit/<a href="http://g.gui.vdigit.py">g.gui.vdigit.py</a> 
gui/wxpython/animation/<a href="http://g.gui.animation.py">g.gui.animation.py</a> 
gui/wxpython/startup/locdownload.py 
gui/wxpython/mapswipe/<a href="http://g.gui.mapswipe.py">g.gui.mapswipe.py</a> 
gui/wxpython/dbmgr/<a href="http://g.gui.dbmgr.py">g.gui.dbmgr.py</a> 
gui/wxpython/gcp/<a href="http://g.gui.gcp.py">g.gui.gcp.py</a> 
gui/wxpython/psmap/<a href="http://g.gui.psmap.py">g.gui.psmap.py</a> 
gui/wxpython/mapdisp/main.py 
gui/wxpython/mapdisp/test_mapdisp.py 
gui/wxpython/iclass/<a href="http://g.gui.iclass.py">g.gui.iclass.py</a> 
gui/wxpython/gui_core/pyedit.py 
gui/wxpython/gui_core/goutput.py 
gui/wxpython/gui_core/ghelp.py 
gui/wxpython/gui_core/forms.py 
gui/wxpython/gui_core/treeview.py 
gui/wxpython/gui_core/simplelmgr.py 
gui/wxpython/datacatalog/<a href="http://g.gui.datacatalog.py">g.gui.datacatalog.py</a> 
gui/wxpython/modules/mapsets_picker.py 
gui/wxpython/tplot/<a href="http://g.gui.tplot.py">g.gui.tplot.py</a>
</code></pre><p style="margin:0px 0px 1.2em!important">Nevertheless, if we start the GUI, and check <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">sys.path</code> in the embedded python console,<br>we see that <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">GISBASE/gui/wxpython</code> has been already added to the path; probably due to one of those calls:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">>>> import sys
>>> sys.path
['/home/pmav99/Prog/svn/grass_svn/dist.x86_64-pc-linux-gnu/gui/wxpython',
 '/home/pmav99/Prog/svn/grass_svn/dist.x86_64-pc-linux-gnu/etc/python',
 '/usr/lib/python37.zip',
 '/usr/lib/python3.7',
 '/usr/lib/python3.7/lib-dynload',
 '/home/pmav99/Prog/svn/grass_svn/venv3/lib/python3.7/site-packages',
 '/home/pmav99/Prog/svn/grass_svn/dist.x86_64-pc-linux-gnu/etc/r.in.wms'
]
</code></pre><p style="margin:0px 0px 1.2em!important">So if <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">GISBASE/gui/wxpython</code> is needed to be in <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">sys.path</code> for the GUI to work correctly, what is the problem with adding it once when the GUI starts and be done with it?</p><p style="margin:0px 0px 1.2em!important">with kind regards,<br>Panos</p>
<div title="MDH:PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWwtbWFya2Rvd24taGVyZS13cmFwcGVyIj48
cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+SSBhbSB0cnlpbmcgdG8gd3JhcCBteSBo
ZWFkIGFyb3VuZCBncmFzcyBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpcyBu
b3QgdGhhdCBlYXN5LCBzbyBiZWFyIHdpdGggbWUgaWYgSSBhc2sgc29tZXRoaW5nIHN0dXBpZC48
L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPjxicj48L3A+PHAgc3R5bGU9Im1h
cmdpbjogMHB4IDBweCAxLjJlbTsiPkluIGBncmFzcy9zY3JpcHQvc2V0dXAucHlgIHRoZXJlIGlz
IGEgZnVuY3Rpb24gY2FsbGVkIGBzZXRfZ3VpX3BhdGgoKWA6PC9wPjxwIHN0eWxlPSJtYXJnaW46
IDBweCAwcHggMS4yZW07Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07
Ij5gYGA8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPmRlZiBzZXRfZ3VpX3Bh
dGgoKTo8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPiZuYnNwOyAmbmJzcDsg
IiIiSW5zZXJ0IHd4UHl0aG9uIEdSQVNTIHBhdGggdG8gc3lzLnBhdGguIiIiPC9wPjxwIHN0eWxl
PSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij4mbmJzcDsgJm5ic3A7IGd1aV9wYXRoID0gb3MucGF0
aC5qb2luKG9zLmVudmlyb25bJ0dJU0JBU0UnXSwgJ2d1aScsICd3eHB5dGhvbicpPC9wPjxwIHN0
eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij4mbmJzcDsgJm5ic3A7IGlmIGd1aV9wYXRoIGFu
ZCBndWlfcGF0aCBub3QgaW4gc3lzLnBhdGg6PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHgg
MS4yZW07Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgc3lzLnBhdGguaW5zZXJ0KDAsIGd1
aV9wYXRoKTwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+YGBgPC9wPjxwIHN0
eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBw
eCAwcHggMS4yZW07Ij5BcyB5b3UgY2FuIHNlZSBpdCBoYXMgYSB2ZXJ5IHNwZWNpZmljIHNpZGUt
ZWZmZWN0LCBpLmUuIGl0IGFkZHMgYEdJU0JBU0UvZ3VpL3d4cHl0aG9uYCB0byBgc3lzLnBhdGhg
LjwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+PGJyPjwvcD48cCBzdHlsZT0i
bWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+PGJyPjwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4
IDEuMmVtOyI+VGhpcyBmdW5jdGlvbiB3YXMgaW50cm9kdWNlZCBpbiBbNjczMTBdKGh0dHBzOi8v
dHJhYy5vc2dlby5vcmcvZ3Jhc3MvY2hhbmdlc2V0LzY3MzEwKSBhbmQgaXMgYmVpbmcgY2FsbGVk
IGluIGEgYnVuY2ggb2YgZ3VpL3d4cHl0aG9uIG1vZHVsZXM6PC9wPjxwIHN0eWxlPSJtYXJnaW46
IDBweCAwcHggMS4yZW07Ij48YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07
Ij5gYGA8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPmd1aS93eHB5dGhvbi9w
aG90bzJpbWFnZS9nLmd1aS5waG90bzJpbWFnZS5weSZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2lu
OiAwcHggMHB4IDEuMmVtOyI+Z3VpL3d4cHl0aG9uL2ltYWdlMnRhcmdldC9nLmd1aS5pbWFnZTJ0
YXJnZXQucHkmbmJzcDs8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPmd1aS93
eHB5dGhvbi9nbW9kZWxlci9nLmd1aS5nbW9kZWxlci5weSZuYnNwOzwvcD48cCBzdHlsZT0ibWFy
Z2luOiAwcHggMHB4IDEuMmVtOyI+Z3VpL3d4cHl0aG9uL3RpbWVsaW5lL2cuZ3VpLnRpbWVsaW5l
LnB5Jm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij5ndWkvd3hweXRo
b24vcmxpc2V0dXAvZy5ndWkucmxpc2V0dXAucHkmbmJzcDs8L3A+PHAgc3R5bGU9Im1hcmdpbjog
MHB4IDBweCAxLjJlbTsiPmd1aS93eHB5dGhvbi92ZGlnaXQvZy5ndWkudmRpZ2l0LnB5Jm5ic3A7
PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij5ndWkvd3hweXRob24vYW5pbWF0
aW9uL2cuZ3VpLmFuaW1hdGlvbi5weSZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4
IDEuMmVtOyI+Z3VpL3d4cHl0aG9uL3N0YXJ0dXAvbG9jZG93bmxvYWQucHkmbmJzcDs8L3A+PHAg
c3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPmd1aS93eHB5dGhvbi9tYXBzd2lwZS9nLmd1
aS5tYXBzd2lwZS5weSZuYnNwOzwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+
Z3VpL3d4cHl0aG9uL2RibWdyL2cuZ3VpLmRibWdyLnB5Jm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJn
aW46IDBweCAwcHggMS4yZW07Ij5ndWkvd3hweXRob24vZ2NwL2cuZ3VpLmdjcC5weSZuYnNwOzwv
cD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+Z3VpL3d4cHl0aG9uL3BzbWFwL2cu
Z3VpLnBzbWFwLnB5Jm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij5n
dWkvd3hweXRob24vbWFwZGlzcC9tYWluLnB5Jm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBw
eCAwcHggMS4yZW07Ij5ndWkvd3hweXRob24vbWFwZGlzcC90ZXN0X21hcGRpc3AucHkmbmJzcDs8
L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPmd1aS93eHB5dGhvbi9pY2xhc3Mv
Zy5ndWkuaWNsYXNzLnB5Jm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07
Ij5ndWkvd3hweXRob24vZ3VpX2NvcmUvcHllZGl0LnB5Jm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJn
aW46IDBweCAwcHggMS4yZW07Ij5ndWkvd3hweXRob24vZ3VpX2NvcmUvZ291dHB1dC5weSZuYnNw
OzwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+Z3VpL3d4cHl0aG9uL2d1aV9j
b3JlL2doZWxwLnB5Jm5ic3A7PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij5n
dWkvd3hweXRob24vZ3VpX2NvcmUvZm9ybXMucHkmbmJzcDs8L3A+PHAgc3R5bGU9Im1hcmdpbjog
MHB4IDBweCAxLjJlbTsiPmd1aS93eHB5dGhvbi9ndWlfY29yZS90cmVldmlldy5weSZuYnNwOzwv
cD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+Z3VpL3d4cHl0aG9uL2d1aV9jb3Jl
L3NpbXBsZWxtZ3IucHkmbmJzcDs8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsi
Pmd1aS93eHB5dGhvbi9kYXRhY2F0YWxvZy9nLmd1aS5kYXRhY2F0YWxvZy5weSZuYnNwOzwvcD48
cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+Z3VpL3d4cHl0aG9uL21vZHVsZXMvbWFw
c2V0c19waWNrZXIucHkmbmJzcDs8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsi
Pmd1aS93eHB5dGhvbi90cGxvdC9nLmd1aS50cGxvdC5weTwvcD48cCBzdHlsZT0ibWFyZ2luOiAw
cHggMHB4IDEuMmVtOyI+YGBgPC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij48
YnI+PC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij5OZXZlcnRoZWxlc3MsIGlm
IHdlIHN0YXJ0IHRoZSBHVUksIGFuZCBjaGVjayBgc3lzLnBhdGhgIGluIHRoZSBlbWJlZGRlZCBw
eXRob24gY29uc29sZSwmbmJzcDs8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsi
PndlIHNlZSB0aGF0IGBHSVNCQVNFL2d1aS93eHB5dGhvbmAgaGFzIGJlZW4gYWxyZWFkeSBhZGRl
ZCB0byB0aGUgcGF0aDsgcHJvYmFibHkgZHVlIHRvIG9uZSBvZiB0aG9zZSBjYWxsczo8L3A+PHAg
c3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbjog
MHB4IDBweCAxLjJlbTsiPmBgYDwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+
Jmd0OyZndDsmZ3Q7IGltcG9ydCBzeXM8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJl
bTsiPiZndDsmZ3Q7Jmd0OyBzeXMucGF0aDwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEu
MmVtOyI+WycvaG9tZS9wbWF2OTkvUHJvZy9zdm4vZ3Jhc3Nfc3ZuL2Rpc3QueDg2XzY0LXBjLWxp
bnV4LWdudS9ndWkvd3hweXRob24nLDwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVt
OyI+Jm5ic3A7Jy9ob21lL3BtYXY5OS9Qcm9nL3N2bi9ncmFzc19zdm4vZGlzdC54ODZfNjQtcGMt
bGludXgtZ251L2V0Yy9weXRob24nLDwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVt
OyI+Jm5ic3A7Jy91c3IvbGliL3B5dGhvbjM3LnppcCcsPC9wPjxwIHN0eWxlPSJtYXJnaW46IDBw
eCAwcHggMS4yZW07Ij4mbmJzcDsnL3Vzci9saWIvcHl0aG9uMy43Jyw8L3A+PHAgc3R5bGU9Im1h
cmdpbjogMHB4IDBweCAxLjJlbTsiPiZuYnNwOycvdXNyL2xpYi9weXRob24zLjcvbGliLWR5bmxv
YWQnLDwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEuMmVtOyI+Jm5ic3A7Jy9ob21lL3Bt
YXY5OS9Qcm9nL3N2bi9ncmFzc19zdm4vdmVudjMvbGliL3B5dGhvbjMuNy9zaXRlLXBhY2thZ2Vz
Jyw8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPiZuYnNwOycvaG9tZS9wbWF2
OTkvUHJvZy9zdm4vZ3Jhc3Nfc3ZuL2Rpc3QueDg2XzY0LXBjLWxpbnV4LWdudS9ldGMvci5pbi53
bXMnPC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMS4yZW07Ij5dPC9wPjxwIHN0eWxlPSJt
YXJnaW46IDBweCAwcHggMS4yZW07Ij5gYGA8L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAx
LjJlbTsiPjxicj48L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAxLjJlbTsiPlNvIGlmIGBH
SVNCQVNFL2d1aS93eHB5dGhvbmAgaXMgbmVlZGVkIHRvIGJlIGluIGBzeXMucGF0aGAgd2hhdCBp
cyB0aGUgcHJvYmxlbSB3aXRoIGFkZGluZyBpdCBvbmNlIHdoZW4gdGhlIEdVSSBzdGFydHMgYW5k
IGJlIGRvbmUgd2l0aCBpdD88L3A+PGRpdj48YnI+PC9kaXY+PC9kaXY+PC9kaXY+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0"></div></div></div>