Awesome
python
A Python 3 framework that currently installs to /Library/ManagedFrameworks/Python/Python3.framework
.
Please see Apple's documentation on file system basics for more information on the thought process here.
This is an intended replacement for when Apple removes /usr/bin/python
(which is happening with the macOS 12.3 release Spring 2022)
Build Issues
At this time, it is required to build this version of python on an Intel macOS device.
Why should I use this instead of a package from python.org?
- It comes with PyObjC and other modules useful for Mac admins pre-installed; making it more like the Apple Python it's intended to replace
- It installs to a location less likely to be overwritten, removed, or modified by developers or power users who are also working with Python
Using interactively
After installing any of the packages, a symbolic link can be used within terminal for interactive Python sessions. At the time of this writing /usr/local/bin/managed_python3
points to /Library/ManagedFrameworks/Python/Python3.framework/Versions/Current/bin/python3
Using with scripts
It is currently recommended to point directly to symbolic link provided by the Python framework.
At the time of this writing /Library/ManagedFrameworks/Python/Python3.framework/Versions/Current/bin/python3
points to /Library/ManagedFrameworks/Python/Python3.framework/Versions/3.8/bin/python3.8
An example script would look like the following:
#!/Library/ManagedFrameworks/Python/Python3.framework/Versions/Current/bin/python3
print('This is an example script.')
Other options to consider
zshenv global alias
If you are calling python
within zsh
scripts, adding a global alias to /etc/zshenv
may be appropriate.
alias -g python3.framework='/Library/ManagedFrameworks/Python/Python3.framework/Versions/Current/bin/python3'
For more information on this method, please see Armin Briegel's "Moving to Zsh" Part II and IV
Notes
To decrease complexity, only a single package may be installed at any given time on a machine.
Upgrades
While Python itself has its own update cadence and dot release schedule, it is likely that this package will have many updates as 3rd party libraries release their own updates, bug fixes and security enhancements. These packages should not break your workflow, but you should test your scripts prior to wide deployment to your devices.
Downgrades
Downgrades will not be supported by this repository.
pip
While pip
is bundled in this framework, it is not recommended to install any external libraries into your frameworks folder outside of what comes with the package. If you need to use or test external libraries not present in the package, it is recommended to use a virtual environment or a tool like pyenv.
Pull requests can and are encouraged to be issued to the recommended
packages requirements file.
Flavors of Python
We currently offer three versions of Python. You can chose which version suits your needs, however only the recommended
package is built/signed/notarized.
No Customization
This is a Python.framework that contains everything from the official Python package and nothing more.
Many open source tools will not work with this, but it may be helpful for development purposes.
Minimal
This is a Python.framework that includes xattr
and PyObjc
- the original intent of Relocatable Python.
Tools that should work when using the "Minimal Flavor":
Recommended
This is a Python.framework that contains everything from "Minimal", and a few libraries that various well-known open source projects require.
Tools that should work when using the "Recommended Flavor":
- Autopkg
- InstallApplications
- Munki
- munkipkg
- munki-facts (python 3 pull request here)
- Nudge
- UMAD
Updating packages
This should be done in a clean virtual environment. After every Python package install, you can run pip freeze | xargs pip uninstall -y
to cleanup the environment.
CI Job
To update the certificate, run base64 -i /path/to/certificate.p12 -o base64string
and import that into the github secrets store and update the password secret as well.
Credits
These packages are created with two other open source tools:
Both are written by Greg Neagle. Thank you for your continued dedication to the macOS platform.