Shakeeb Alireza <shakeeb.alir...@gmail.com> added the comment:

Thanks, Mathias. This is all about improving python's 'relocatability'.

Just to expand on my prior point: the scenario we are talking about is where 
one embeds python in a host application's plugin system rather than in the host 
application itself.

In this case, sys.executable is the host application and a relocatable plugin 
embeds a 'python client'. If a full python distribution is not bundled within 
this client[*], it needs to (1) link to libpythonX.Y.dylib and (2) get the 
location of the standard library. 

There are standard cross-platform methods for (1) to be achieved by way of 
symmetrical @rpath lookups on the client and libpythonX.Y.dylib sides. So this 
resolvable even in the case when python is compiled with --enabled-shared.

However, even if (1) is achieved, the client cannot get, programmatically via 
the python c-api, the location of libpythonX.Y.dylib (even if it is properly 
dynamically linking to it), because it cannot rely on sys.executable. I think 
this is crux of Mathias' argument.

Of course there are workarounds, but they are (at least to me) all platform 
specific. 

The first and easiest is to just build using the Framework structure and don't 
ever use --enable-shared, provided you find Greg Neagle's solution 
(https://bugs.python.org/issue42514)

Another workaround which is specific to my context (which I have attached), is 
to use Apple's CoreFoundation library to get the path to the plugin bundle and 
from there find our way to the python distribution in the containing folder 
structure (package).


[*] It is possible to insert a full python distribution into a bundle (in the 
osx meaning), but then it becomes necessarily frozen or 'sealed' due to Apple's 
codesigning and notarization requirements, and it basically means that the user 
cannot extend it with further installations of python packages which contain 
c-extensions unless they jump through some additional codesigning and 
notarization hoops.

----------
Added file: https://bugs.python.org/file50677/workaround.c

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue18309>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to