mirror of https://github.com/python/cpython
91 lines
3.8 KiB
ReStructuredText
91 lines
3.8 KiB
ReStructuredText
Building a Python Mac OS X distribution
|
|
=======================================
|
|
|
|
The ``build-install.py`` script creates Python distributions, including
|
|
certain third-party libraries as necessary. It builds a complete
|
|
framework-based Python out-of-tree, installs it in a funny place with
|
|
$DESTROOT, massages that installation to remove .pyc files and such, creates
|
|
an Installer package from the installation plus other files in ``resources``
|
|
and ``scripts`` and placed that on a ``.dmg`` disk image.
|
|
The installer package built on the dmg is a macOS bundle format installer
|
|
package. This format is deprecated and is no longer supported by modern
|
|
macOS systems; it is usable on macOS 10.6 and earlier systems.
|
|
To be usable on newer versions of macOS, the bits in the bundle package
|
|
must be assembled in a macOS flat installer package, using current
|
|
versions of the pkgbuild and productbuild utilities. To pass macoS
|
|
Gatekeeper download quarantine, the final package must be signed
|
|
with a valid Apple Developer ID certificate using productsign.
|
|
Starting with macOS 10.15 Catalina, Gatekeeper now also requires
|
|
that installer packages are submitted to and pass Apple's automated
|
|
notarization service using the altool command. To pass notarization,
|
|
the binaries included in the package must be built with at least
|
|
the macOS 10.9 SDK, mout now be signed with the codesign utility
|
|
and executables must opt in to the hardened run time option with
|
|
any necessary entitlements. Details of these processes are
|
|
available in the on-line Apple Developer Documentation and man pages.
|
|
|
|
As of 3.8.0 and 3.7.7, PSF practice is to build one installer variants
|
|
for each release. Note that as of this writing, no Pythons support
|
|
building on a newer version of macOS that will run on older versions
|
|
by setting MACOSX_DEPLOYMENT_TARGET. This is because the various
|
|
Python C modules do not yet support runtime testing of macOS
|
|
feature availability (for example, by using macOS AvailabilityMacros.h
|
|
and weak-linking). To build a Python that is to be used on a
|
|
range of macOS releases, always build on the oldest release to be
|
|
supported; the necessary shared libraries for that release will
|
|
normally also be available on later systems, with the occasional
|
|
exception such as the removal of 32-bit libraries in macOS 10.15.
|
|
|
|
build-installer requires Apple Developer tools, either from the
|
|
Command Line Tools package or from a full Xcode installation.
|
|
You should use the most recent version of either for the operating
|
|
system version in use. (One notable exception: on macOS 10.6,
|
|
Snow Leopard, use Xcode 3, not Xcode 4 which was released later
|
|
in the 10.6 support cycle.)
|
|
|
|
1. 64-bit, x86_64, for OS X 10.9 (and later)::
|
|
|
|
/path/to/bootstrap/python2.7 build-installer.py \
|
|
--universal-archs=intel-64 \
|
|
--dep-target=10.9
|
|
|
|
- builds the following third-party libraries
|
|
|
|
* OpenSSL 1.1.1
|
|
* Tcl/Tk 8.6
|
|
* NCurses
|
|
* SQLite
|
|
* XZ
|
|
* libffi
|
|
|
|
- uses system-supplied versions of third-party libraries
|
|
|
|
* readline module links with Apple BSD editline (libedit)
|
|
* zlib
|
|
* bz2
|
|
|
|
- recommended build environment:
|
|
|
|
* Mac OS X 10.9.5
|
|
* Xcode Command Line Tools 6.2
|
|
* ``MacOSX10.9`` SDK
|
|
* ``MACOSX_DEPLOYMENT_TARGET=10.9``
|
|
* Apple ``clang``
|
|
|
|
|
|
General Prerequisites
|
|
---------------------
|
|
|
|
* No Fink (in ``/sw``) or MacPorts (in ``/opt/local``) or Homebrew or
|
|
other local libraries or utilities (in ``/usr/local``) as they could
|
|
interfere with the build.
|
|
|
|
* It is safest to start each variant build with an empty source directory
|
|
populated with a fresh copy of the untarred source or a source repo.
|
|
|
|
* It is recommended that you remove any existing installed version of the
|
|
Python being built::
|
|
|
|
sudo rm -rf /Library/Frameworks/Python.framework/Versions/n.n
|
|
|