Title: Relocatable framework for macOS
Type: enhancement Stage:
Components: macOS Versions: Python 3.11
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: erlendaasland, gregneagle, macmule, ned.deily, njs, ronaldoussoren, tomgoddard
Priority: normal Keywords:

Created on 2020-11-30 18:28 by gregneagle, last changed 2021-10-21 16:02 by ned.deily.

Messages (6)
msg382171 - (view) Author: Greg Neagle (gregneagle) Date: 2020-11-30 18:28
The current Python.framework installed by the macOS packages is hard-coded to /Library/Frameworks/Python.framework and breaks if renamed or moved.

A relocatable framework would allow users/admins/developers to install a specific framework to an alternate location, or include it inside an application bundle, or access it from a mounted disk image.

Currently it is possible to use `otool` and `install_name_tool` to convert the current framework into one that can be relocated, but doing so breaks any code signing. With Apple Silicon, all executable code and libraries must be code signed, so the effort of relocating the Python framework becomes that more difficult.

Ideally the official macOS framework would be built as relocatable, eliminating the need to modify it and re-sign it to use it anywhere other than  /Library/Frameworks/Python.framework.
msg382173 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2020-11-30 18:55
There's also macholib (which is used by py2app for rewriting mach-o headers). 

Note that resigning for arm64 is possible using the following command:

$ codesign -s - --preserve-metadata=identifier,entitlements,flags,runtime -f <path to mach-O>.

This was mentioned in the Xcode 12 release notes.

BTW. My hobby horse w.r.t. a relocatable Python installation is to turn the current framework inside out: have a "" or "Python" that contains the framework and presents a GUI when double clicked (probably IDLE with some additional menu items). This would simplify the installation experience (no installer, just drop somewhere convenient).   

I have no idea if I'll ever get around to implementing this.
msg382180 - (view) Author: Greg Neagle (gregneagle) Date: 2020-11-30 19:19
A you could drop somewhere convenient would by definition need a relocatable Python.framework within. :-)
msg396447 - (view) Author: Greg Neagle (gregneagle) Date: 2021-06-23 21:17
While checking this issue hoping there might be updates, I realized that I didn't share a link to the script I use to convert's Python framework into one that can be relocated.

It's here:
msg396772 - (view) Author: macmule (macmule) Date: 2021-06-30 08:28
Just wondering if any movement on this etc.

This is something I've been struggling with too, and have attempted to overcome via Greg's project to no avail.
msg396810 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2021-07-01 07:32
I guess Ned and I are the only core devs that would be vaguely interested in working on this.  I have no active plans to work on this.

Having a relocatable framework would be nice, but doing this in a way that maintains all functionality, esp. w.r.t. the Python executable.
Date User Action Args
2021-10-21 16:02:46ned.deilysetversions: + Python 3.11, - Python 3.8, Python 3.9, Python 3.10
2021-07-01 07:32:48ronaldoussorensetmessages: + msg396810
2021-06-30 08:28:04macmulesetnosy: + macmule
messages: + msg396772
2021-06-23 21:17:34gregneaglesetmessages: + msg396447
2021-06-03 11:19:19erlendaaslandsetnosy: + erlendaasland
2021-06-03 10:04:39njssetnosy: + njs
2021-01-21 18:23:07tomgoddardsetnosy: + tomgoddard
2020-11-30 19:19:54gregneaglesetmessages: + msg382180
2020-11-30 18:55:47ronaldoussorensetmessages: + msg382173
2020-11-30 18:28:37gregneaglecreate