Skip to content

Releases: astral-sh/python-build-standalone

20240415

15 Apr 16:58
Compare
Choose a tag to compare

Need help choosing which build to use? See documentation at https://gregoryszorc.com/docs/python-build-standalone/20240415/running.html.

Upgrades

  • CPython 3.12.2 -> 3.12.3
  • CPython 3.11.8 -> 3.11.9
  • CPython 3.10.13 -> 3.10.14
  • CPython 3.9.18 -> 3.9.19
  • CPython 3.8.18 -> 3.8.19
  • musl libc 1.2.4 -> 1.2.5

Breaking

  • The LTO-only build are no longer published for targets which have a PGO+LTO build. Consumers of the LTO-only builds are recommended to migrate to the PTO+LTO variants (#223). Affected triples are: aarch64-apple-darwin, x86_64-apple-darwin, x86_64-unknown-linux-gnu, x86_64_v2-unknown-linux-gnu, and x86_64_v3-unknown-linux-gnu.
  • The static Windows builds have been removed. Consumers of the static Windows builds must switch to the dynamically-linked Windows builds. See #221 for why this was done.
  • The dynamically-linked Windows builds are now published without a -shared- tag (e.g., cpython-3.10.14+20240415-i686-pc-windows-msvc-shared-pgo-full.tar.zst is now available as cpython-3.10.14+20240415-i686-pc-windows-msvc-pgo-full.tar.zst). The -shared- aliases will continue to be uploaded for now, though both assets refer to the same built artifact, and consumers are recommended to migrate to the non-shared variant (#241).

Other

  • armv7-unknown-linux-gnueabi and armv7-unknown-linux-gnueabihf artifacts are now published.
  • The build system now supports building CPython from a local source directory (rather than requiring a source tarball distribution). (#236)

Full Changelog: 2024022...2024041

20240224

25 Feb 07:02
Compare
Choose a tag to compare

Need help choosing which build to use? See documentation at https://gregoryszorc.com/docs/python-build-standalone/20240224/running.html.

  • CPython 3.12.1 -> 3.12.2
  • CPython 3.11.7 -> 3.11.8
  • setuptools 69.0.3 -> 69.1.0
  • pip 23.3.2 -> 24.0
  • OpenSSL 3.0.12 -> 3.0.13
  • SQLite 3.44.2 -> 3.45.1
  • libffi 3.3 -> 3.4 (except on Linux musl)
  • binutils 2.41 -> 2.42
  • LLVM 16.0.3 -> 17.0.6 (macOS only)
  • macOS LLVM toolchains now use lld to link instead of the system linker.
  • The switch to the lld linker fixed a bug where Apple's system linker (/usr/bin/ld) didn't preserve weak symbol references during LTO. This could result in LTO'd macOS distributions crashing on older macOS versions due to a missing symbol reference. See #216 for more.
  • Various GitHub Actions upgraded. Now using the latest macOS runners and macOS SDKs to build. This should not affect macOS version targeting.
  • macOS aarch64 distributions are now built on GitHub Actions runners instead of the author's personal M1 Mac Mini. All built artifacts are now built on GitHub Actions.
  • Rework of the terminfo database on Linux distributions. ncurses now looks for the terminfo database in /etc/terminfo, /lib/terminfo, and /usr/share/terminfo by default. This should result in the terminfo database being found on many popular Linux distributions, including Debian and RedHat variants. Read: the Python REPL should respond to key presses like backspace properly. In addition, the distribution archive contains a copy of the terminfo database in python/install/usr/share/terminfo. However, this terminfo database won't be used automatically at runtime unless custom code is run to point ncurses at it. See the documentation for more.
  • Linux and macOS distributions now contain a bin/python symlink that points to whatever bin/python3 points to.
  • The file times in tar archives has been updated to UTC midnight on 2024-01-01.

20240107

08 Jan 05:47
Compare
Choose a tag to compare
  • CPython 3.11.6 -> 3.11.7
  • CPython 3.12.0 -> 3.12.1
  • pip 23.2.1 -> 23.3.2
  • setuptools 68.2.2 -> 69.0.3
  • OpenSSL 3.0.11 -> 3.0.12
  • SQLite 3.43.1 -> 3.44.2
  • ncurses 6.3 -> 6.4
  • libX11 1.6.8 -> 1.6.12
  • libXau 1.0.7 -> 1.0.11
  • libcxb 1.13.1 -> 1.14
  • libpthread-stubs 0.1 -> 0.5
  • x11-util-macros 1.19.2 -> 1.20.0
  • xtrans 1.4.0 -> 1.5.0
  • LLVM 17.0.1 -> 17.0.6 (Linux builds only)
  • (Windows) sys.winver is now defined properly on CPython 3.10+ (#199)
  • CPython 3.8, 3.9, and 3.10 Linux distributions no longer link against libcrypt.so.1 outside of the _crypt extension module. This was the intended behavior of recent releases but the intended behavior was only working correctly on CPython 3.11 and 3.12. (#197)
  • tzset() function is now force enabled on Linux builds. Previously, cross-compiled distributions likely had it disabled. This enables the time.tzset() Python function to work. (#196)
  • On Linux and macOS, various distribution configuration files are now normalized post build to remove Clang specific compiler flags and references to build paths. e.g. on Linux, before CFLAGS was reported as -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -fdebug-default-version=4 -fPIC -I/tools/deps/include -I/tools/deps/include/ncursesw -I/tools/deps/libedit/include and afterwards it is -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -fPIC. This change should make distributions more portable. The practical effect of this change is that build systems keying off the build settings embedded in the distribution should now have a higher probability of working if they were broken before. (#194)

20231002

02 Oct 22:57
Compare
Choose a tag to compare
  • CPython 3.12.0 now supported. These distributions should be considered beta quality since it is their initial release and typically there are both upstream bugs and bugs in our packaging in the initial release. So exercise caution before deploying to production.
  • CPython 3.8.17 -> 3.8.18
  • CPython 3.11.5 -> 3.11.6
  • OpenSSL 1.1 -> 3.0 on supported platforms. Linux and macOS now use OpenSSL 3.0.x. Windows uses OpenSSL 3.0.x on CPython 3.11+.
  • OpenSSL 3.0.11
  • OpenSSL 1.1.1v -> 1.1.1w
  • We are no longer publishing i686-unknown-linux-gnu distributions due to lack of downloads. If this inconveniences you, please file an issue and explain how this impacts you.
  • autoconf 2.69 -> 2.71
  • SQLite 3.43.0 -> 3.43.1
  • setuptools 68.1.2 -> 68.2.2
  • LLVM 16.0.3 -> 17.0.1 on Linux (macOS held back for the moment due to compatibility issues)
  • BOLT is now enabled on CPython 3.12 on Linux x86_64 non-musl targets.

20230826

26 Aug 14:58
Compare
Choose a tag to compare
  • CPython 3.11.4 -> 3.11.5
  • CPython 3.10.12 -> 3.10.13
  • CPython 3.9.17 -> 3.9.18
  • CPython 3.8.16 -> 3.8.17
  • setuptools 68.0.0 -> 68.1.2
  • SQLite 3.42 -> 3.43
  • OpenSSL 1.1.1u -> 1.1.1v
  • binutils 2.40 -> 2.41

20230726

27 Jul 02:05
Compare
Choose a tag to compare
  • CPython 3.9.16 -> 3.9.17
  • CPython 3.10.11 -> 3.10.12
  • CPython 3.11.3 -> 3.11.4
  • setuptools 67.7.2 -> 68.0.0
  • pip 23.1.2 -> 23.2.2
  • musl 1.2.3 -> 1.2.4
  • OpenSSL 1.1.1s -> 1.1.1u
  • SQLite 3.41.2 -> 3.42.0
  • libxzma 5.2.9 -> 5.2.12
  • Release artifacts for Linux s390x are now published.
  • _crypt extension module is now distributed as a standalone shared library (as opposed to being statically linked in libpython). This removes a hard dependency on libcrypt.so.1 for compatibility with modern Linux distributions. See #173 for context. Affects Linux non-musl distributions.

20230507

14 May 17:33
Compare
Choose a tag to compare
  • CPython 3.11.1 -> 3.11.3
  • CPython 3.10.9 -> 3.10.11
  • pip 22.3.1 -> 23.1.2
  • setuptools 65.6.3 -> 67.7.2
  • Add ppc64le-unknown-linux-gnu distributions for CPython 3.9, 3.10, and 3.11
  • SQLite 3.40.1 -> 3.41.2
  • binutils 2.39 -> 2.40
  • LLVM 15.0.7 -> 16.0.3

Note: the initial upload of this release on 2023-05-07 corrupted the release assets (#172). The assets were re-uploaded on 2023-05-14. This effectively changed the SHA-256 of all assets. We would normally treat releases as immutable. But since the initial release was fully corrupted, we decided to just delete and re-upload the assets.

20230116

16 Jan 21:54
Compare
Choose a tag to compare

Need help choosing which build to use? See documentation at https://gregoryszorc.com/docs/python-build-standalone/20230116/running.html.

This is a major release compared to recent releases due to a number of changes in order to support Python 3.11. Extended testing of this release during upgrades is encouraged.

  • Added CPython 3.11 support and distributions for all supported platforms.
  • macOS and non-musl i686 and x86-64 Linux distributions now compiled with LLVM/Clang 15.0.7 instead of 14.0.3. This has the side-effect of introducing DWARF v5 in Linux distributions. #155 is open to consider rolling this back to DWARF v4.
  • 3.8 and 3.9 Linux distributions now always link against libedit (02e8695). Before, these 3.8 and 3.9 distributions had their _readline extension module linked against readline by default. The full distributions contained a compiled extension variant linked against libedit.
  • The _gdbm extension module is now globally disabled (8028229). Before, it was enabled inconsistently on various distributions.
  • As a consequence of the above 2 changes, all Python distributions are no longer GPL encumbered. Before, the 3.8 and 3.9 Linux and macOS distributions were GPL encumbered due to a dependency on readline and possibly gdbm.
  • The definition of extension modules on Linux and macOS distributions is now centrally defined in a YAML file. All extension build instructions and metadata for PYTHON.json is now derived from this file. This teased out subtle inconsistencies with how extension modules are built. Some of these are documented below. Some changes may have eluded the project maintainer's watchful eye. Be on the lookout for subtle changes in extension modules.
  • _hashlib metadata in PYTHON.json no longer advertises a dependency on libssl for some distributions.
  • There is a possibility that _zlib linking behavior changed on some distributions as a result of porting extension module metadata to YAML. (89e0952)
  • The _testcapi extension module is now globally disabled.
  • The xxlimited extension module is now globally disabled.
  • --with-dbmliborder is now explicitly passed to CPython's configure. This may have impacted with dbm library is used on some distributions. But hopefully any changes won't have a meaningful impact on functionality.
  • mpdecimal is now built from source (fe9fca0) and _decimal is now linked against our built libmpdec (40ca5c7). Previously, we used the mpdecimal vendored with and built by CPython.
  • expat is now built from source (735402c) and the _elementtree and pyexpat extension modules now link against our built libexpat (5887123). Previously, we used the expat library vendored with and built by CPython.
  • iOS builds have been removed from CI. They weren't tested. We weren't releasing them. And the CI builds were only running on CPython 3.9. If iOS (and other Apple OS) support is important to you, please file a GitHub issue so we can discuss how to support these releases.
  • PY_SQLITE_ENABLE_LOAD_EXTENSION is now explicit set on all Linux and macOS distributions.
  • CI now runs verification invoking the built interpreter on Linux where it can. Previously, we only performed the static Rust-based validation on all platforms and the running interpreter tests on macOS and Windows.
  • All CPython patches have been factored out of cpython-unix/build-cpython.sh into standalone .patch files.
  • Rust dependencies have been updated to latest versions.
  • build-windows.py now accepts a --vs argument to control which Visual Studio version to use. It defaults to 2019 (the previous implicit default). But Visual Studio 2022 is known to work.
  • build-windows.py now accepts a --windows-sdk-version argument to control which Windows SDK version to use. It defaults to 10.0.20348.0 (the previous implicit default). Minimal testing has been done to validate that other SDK versions (including Windows 11 SDKs) work.
  • Duplicate symbol linker warnings are suppressed on Windows static builds. This greatly cuts down on build log spam.
  • Validation code now ensures that all PYTHON.json referenced object files are present in the tar archive.
  • Validation code now ensures that all PYTHON.json extension module initialization functions are present in binaries.
  • Fixed macOS aarch64 -> x86_64 cross-compilation (#150).

CPython 3.11 Potential Areas of Concern

Supporting a new major Python release is always a fair amount of work and there are bound to be bugs in the initial release. This section calls out where we think there may be potential for issues with the 3.11 distributions.

  • PYTHON.json build metadata. We know the object file annotations are wrong. See #156. It is possible some symbols are present/missing in python/libpython as a result of changes to CPython's build system. This area will be iterated on in subsequent releases.
  • Extension module configuration in general. CPython 3.11 started moving a lot of logic from its setup.py into configure. This is a good idea. But the port is not yet complete and logic still spans configure and setup.py. This refactoring was rather invasive to CPython's build system and necessitated a lot of work on our end to work in the new world. Because the port to configure is not yet complete, we devised patches to effectively disable a lot of its functionality and continue leveraging our (somewhat hacky) solution of emitting config files and makefile rules explicitly instead of going through the normal mechanisms. All this means extension module building in general is more prone to regressions and unexpected changes than prior Python versions. See 0afdfa0 and commits around it for more specifics.
  • _dbm extension module behavior. See 3234e7f for more info.

20221220

21 Dec 06:15
Compare
Choose a tag to compare

Need help choosing which build to use? See documentation at https://gregoryszorc.com/docs/python-build-standalone/20221220/running.html.

  • CPython 3.8.15 -> 3.8.16
  • CPython 3.9.15 -> 3.9.16
  • CPython 3.10.8 -> 3.10.9
  • readline 8.1.2 -> 8.2
  • xz 5.2.6 -> 5.2.9
  • sqlite 3.39.4 -> 3.40.0
  • setuptools 65.5.1 -> 65.6.3
  • mkfifoat and mknodat are always disabled on Python 3.8 when targeting Apple platforms. Prior versions might have used these syscalls at runtime when compiling against a macOS 13.x SDK, which would result in a segfault at runtime on older macOS machines. Previous releases were not built with macOS 13.x SDK and shouldn't have been impacted by this bug.

20221106

06 Nov 19:45
Compare
Choose a tag to compare

Need help choosing which build to use? See documentation at https://gregoryszorc.com/docs/python-build-standalone/20221106/running.html.

  • CPython 3.10.7 -> 3.10.8
  • CPython 3.9.14 -> 3.9.15
  • CPython 3.8.14 -> 3.8.15
  • setuptools 65.4.1 -> 65.5.1
  • pip 22.2.2 -> 22.3.1
  • OpenSSL 1.1.1q -> 1.1.1s
  • zlib 1.2.12 -> 1.2.13
  • xz 5.2.5 -> 5.2.6