<div dir="ltr"><div dir="ltr"><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 24, 2019 at 1:25 PM Chris Barker - NOAA Federal via Python-Dev <<a href="mailto:python-dev@python.org">python-dev@python.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">If your primary concern is module clashes between plugins, maybe you<br>
can hack around that:<br>
<br>
1) if the plugins are providing copies of any other modules, then you<br>
can simply require them to put them in their own namespace — that is,<br>
a plug-in is a single package, with however many sub modules as it may<br>
need.<br>
<br>
2) if plugins might require third party packages that need to be<br>
isolated, then maybe you could use an import hook that<br>
re-names/isolates the modules each plugin loads, so they are kept<br>
separate.<br>
<br>
I haven’t thought through how to do any of this, but in principle, you<br>
can have the same module loaded twice if it has a different name.<br></blockquote><div> </div><div>This is dangerous for extension modules.  C is a single global space unrelated to Python module names that cannot be isolated without intentionally building and linking each desired extension module statically and configured not to export its own symbols (no-export-dynamic).  Non trivial.</div><div><br></div><div>Suggesting importing the same extension module multiple times under different Python sys.modules names is a recipe for disaster.  Most extension module code is not written with that in mind.  So while <i>some</i> things happen to "work", many others blow up in unexpected hard to debug ways.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Not that sub interpreters aren’t cool and useful, but you can probably<br>
handle module clashes in a simpler way.<br></blockquote><div><br></div><div>They're a cool and useful theory... but I really do not recommend their use for code importing other libraries expecting to be isolated.  CPython doesn't offer multiple isolated runtimes in a process today.</div><div><br></div><div>-gps</div></div></div>