This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author shakfu
Recipients eric.snow, mathias, ncoghlan, ronaldoussoren, shakfu, vstinner
Date 2022-03-15.05:34:35
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1647322475.98.0.0319302483422.issue18309@roundup.psfhosted.org>
In-reply-to
Content
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.
History
Date User Action Args
2022-03-15 05:34:36shakfusetrecipients: + shakfu, ronaldoussoren, ncoghlan, vstinner, eric.snow, mathias
2022-03-15 05:34:35shakfusetmessageid: <1647322475.98.0.0319302483422.issue18309@roundup.psfhosted.org>
2022-03-15 05:34:35shakfulinkissue18309 messages
2022-03-15 05:34:35shakfucreate