Skip to content

[WIP: FIX] python 3.15.0rc2 (host/run + PREFIX/lib) - #261

Draft
skupr-anaconda wants to merge 11 commits into
masterfrom
PKG-15601-libpython-split-fix
Draft

skupr-anaconda wants to merge 11 commits into
masterfrom
PKG-15601-libpython-split-fix

Conversation

@skupr-anaconda

Copy link
Copy Markdown

Destination channel: ad-testing/label/py315

Links

Explanation of changes:

  • Same C16+C17 libpython split as python 3.15.0rc2: split libpython shared output #259, plus Charles's follow-ups (pipefail, stricter prefix-replacement NEEDED check, osx PGO dylib link, anaconda.yaml libpython).
  • mkdir -p ${PREFIX}/lib before copying shared libs in install_shared.sh.
  • libpython: pin_subpackage('python') stays on build; host: [] and run: [] (no host/run cycle).
  • python-freethreading / python-gil / python-jit use explicit run: keys.

Notes:

skupr-anaconda and others added 9 commits September 28, 2026 15:54
PKG-15601 C16+C17: move unix shared libs into libpython
(install_shared.sh) and static into install_static.sh so python
no longer ships .so/.dylib/.a. SYSCONFIG from the shared tree.
Keep CF conda-forge#565 SYSCONFIG note and CF "empty on windows". Drop
Install-only CXX comments that CF does not have on those lines.
The build-time interpreter links to libpython at PREFIX/lib, but the
dylib has not been installed there when PGO runs checksharedmods.
Temporarily link it from build-shared and remove the link afterward.
Keep python pin on libpython build so the shared install can copy
from the python output without a host/run cycle. mkdir PREFIX/lib
before cp. Metapackages use explicit run: keys.
@skupr-anaconda
skupr-anaconda marked this pull request as draft September 30, 2026 08:30
@skupr-anaconda skupr-anaconda changed the title PKG-15601 — python 3.15.0rc2: split libpython (host/run + PREFIX/lib) [WIP] PKG-15601 — python 3.15.0rc2: split libpython (host/run + PREFIX/lib) Sep 30, 2026
@skupr-anaconda skupr-anaconda changed the title [WIP] PKG-15601 — python 3.15.0rc2: split libpython (host/run + PREFIX/lib) [WIP: FIX] python 3.15.0rc2: split libpython (host/run + PREFIX/lib) Sep 30, 2026
Win empty-package check rejected python in build with host/run empty.
Unix libpython tests need Python.h and python3-config at test time
only. Keep host/run empty so libpython stays an independent output.
@skupr-anaconda skupr-anaconda changed the title [WIP: FIX] python 3.15.0rc2: split libpython (host/run + PREFIX/lib) [WIP: FIX] python 3.15.0rc2 (host/run + PREFIX/lib) Sep 30, 2026
install_shared.sh needs python's build-shared/ in SRC_DIR. Pin python
on unix build only so conda-build orders that output first. Keep
host/run empty. Skip the empty Windows libpython output.
@skupr-anaconda

Copy link
Copy Markdown
Author

Reviewer notes: purpose + staging artifact layout

Inspected graph 31575e93 (07e8e80) and staging pbp/fs/python-feedstock/pr261/07e8e80. File lists below are from the .conda payloads (GIL _101_cp315 unless noted).

What this PR is for

Split the Unix shared library out of python into a new libpython output (CF C16/C17 / #259), so:

  • python = interpreter + stdlib + headers + extension modules. No libpython*.so / .dylib.
  • libpython = shared lib for embedders (GDB, etc.). host: [] / run: [] — no cycle with python. Weak run_exports: libpython >=3.15.0rc2,<4.0a0.
  • libpython-static = .a / .nolto.a only (unix install script). Exact pin on matching python.
  • Win: libpython is skipped; the DLLs stay in python. libpython-static still publishes but is empty.

The interpreter does not NEEDED libpython. Linking extensions to libpython is redundant on Linux and harmful on Darwin (multiply-defined symbols). Prefix-replacement tests now distinguish libpython (must NEEDED the shared lib) vs libpython-static (must not).

Dest: ad-testing/label/py315. Do not merge with #259. Do not ship 3.15 to pkgs/main.

Graph (this SHA)

50 completed / 3 failed. Two linux-64 tests (libpython-static, python-jit) died on repo.anaconda.com HTTP 429 / conda-client registration after the solver succeeded — infra, not this split. One linter task also failed.

Staging matrix (3.15.0rc2)

subdir python libpython libpython-static notes
linux-64, linux-aarch64, osx-arm64 GIL + FT GIL + FT GIL + FT
win-64 GIL + FT — skipped empty (0 files) DLLs inside python
osx-64, win-arm64 — — — empty indexes
noarch — — — python-gil, python-freethreading, python-jit (__unix / __win)

libpython (new)

linux-64 GIL (hb63ce8a_101_cp315, ~12 MB .conda):

lib/libpython3.15.so.1.0    ~40 MB  SONAME libpython3.15.so.1.0  RPATH $ORIGIN/.
lib/libpython3.15.so        → libpython3.15.so.1.0
lib/libpython3.so           ~15 KB  stub, NEEDED libpython3.15.so.1.0

linux-64 FT: libpython3.15t.so{,.1.0} + libpython3.so.
osx-arm64 GIL: lib/libpython3.15.dylib + lib/libpython3.dylib only (no .1.0).

python

Does not contain libpython*. Does not depend on libpython.
run_exports: python_abi 3.15.* *_cp315 (FT: *_cp315t + track_features: free-threading). Frozen AR: tk 9.0.4, openssl 3.5.8, glibc 2.28, PSF-2.0.

linux-64 GIL (h67b78d7_101_cp315, 2814 files):

  • bin/{python,python3,python3.15,python3.15-config,python3-config,idle3,idle3.15,pydoc,pydoc3,pydoc3.15}
  • include/ (296), lib/python3.15/ (791 .py + 1555 .pyc + 76 lib-dynload/*.so)
  • compiler_compat/{ld,README}, manpages
  • Interpreter: PIE ELF, NEEDED pthread/dl/util/m/gcc_s/libc only, RPATH $ORIGIN/../lib, not stripped (debug_info)

linux-64 FT: same under lib/python3.15t/, extra bin/python3.15t{,-config}.

win-64 GIL (2013 files): python.exe / pythonw.exe / python3.dll / python315.dll (+ pdbs), libs/python3.lib + python315.lib, 37 .pyd in lib/python/lib-dynload/ (no DLLs/).

libpython-static

linux-64 GIL: lib/libpython3.15.a, lib/libpython3.15.nolto.a, lib/python3.15/config-3.15-x86_64-linux-gnu/libpython3.15.a (~387 MB payload).
win-64: 0 files (unix-only install_static.sh; empty artifact still published).

Noarch

package files role
python-gil 0 metapackage: python 3.15.0rc2.* + python_abi * *_cp315
python-freethreading 0 same + *_cp315t
python-jit unix 2 activate/deactivate → PYTHON_JIT=1
python-jit win 4 same + .bat

Bottom line for review

Layout matches the intended CF-style split. Shared lib is out of python and into libpython on Unix. Empty win libpython (skipped) / empty win libpython-static / empty ABI metapackages are by recipe. Remaining CI red is the 429 on two tests, not missing files in libpython.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants