python 3.15.0rc2: align python-feedstock with conda-forge - #256
skupr-anaconda wants to merge 9 commits into
Conversation
Replay #256 topology on origin/master without merge 2a73320. Keep master patch numbering (0028 site.pth, 0029 zlib-ng, 0030 xxlimited). Wrap win FT patches in freethreading jinja; add CF conda-forge#928 libpython unix weak run_exports. Refs: PKG-15601
2a73320 to
6e3e952
Compare
|
Interesting, there is a new vendored |
PKG-2624 spike stacked on #256. Drop release variants so this graph uploads only to ad-testing/label/py315-debug, and gate the d ABI with unconditional tests instead of PY_INTERP_DEBUG getenv. Windows skipped. Do not merge to pkgs/main.
Artifact compare vs conda-forge
|
| What | Staging | conda-forge | Action |
|---|---|---|---|
| Linux linker-compat dir | compiler_compat/{ld,README} |
share/python_compiler_compat/ |
It's historical. Optional: move to CF path |
GIL conda-site.pth |
missing | present | Keep missing. Do not restore CFEP-65 lib/python/site-packages (numba failure) |
FT conda-site.pth |
1 line | 2 lines | Keep 1 line |
platform.py / sys.version |
Anaconda branding | conda-forge branding | Keep 0023-branding.patch |
_tkinter |
libtcl9tk9.0 |
libtk8.6 |
Keep tk 9 |
osx-arm64 libpython*.dylib |
11.3 MB + __llvm_prf_* |
6.6 MB, no PGO sections | Look — leftover PGO on the shared dylib |
Shebangs / _sysconfig* / conda-meta differ by prefix (croot/ vs conda-bld/). Cannot match across CIs.
Why binaries differ (do not “fix” to CF)
- tk 9 vs 8.6, glibc 2.28 vs 2.17,
libgcc14 vs 15,libffi3.4 vs 3.7,sqlitevslibsqlite,xzvsliblzma, no_python_rc, licensePSF-2.0vsPython-2.0. - linux-64
CFLAGS:-march=x86-64-v2(aggregate) vs CF-march=nocona..comment: gcc 14.3 vs 15.3. - linux
pyconfig.h: extraHAVE_*(statx, getrandom, copy_file_range, …) from el8 vs cos7. osx: onlyHAVE_READLINE_READLINE_H. - linux
python3.15~40.4 vs 40.3 MB (DWARF, not a file-list bug). Win.pyd~8 KB larger (MSVC + tk 9).
osx-arm64 libpython (the one real size bug)
python3.15 is fine (~6.57 MB both). libpython3.15.dylib is not:
- Staging
__TEXT,__text6.46 MB vs CF 3.86 MB. - Staging has
__llvm_prf_cnts/data/names/vnds(~2.0 MB). CF has none.
Cause: both configures get --enable-optimizations, but only the static tree runs make profile-opt. Shared make leaves PGO instrumentation in the dylib that install_shared.sh ships. Same story for libpython3.15.nolto.a (21.5 vs 14.6 MB).
Fix (follow-up, not required for file-list parity): do not pass --enable-optimizations into the shared configure, or run/strip PGO on that tree before cp libpython*.dylib.
Bottom line
File names: aligned except linux compiler_compat/ and GIL conda-site.pth.
File bytes: will never match CF while we keep tk 9, glibc 2.28, x86-64-v2, branding, and PBP prefixes. That is the frozen AR-delta, not a regression.
Optional in this PR: relocate compiler_compat. Do not chase CF bytes. Worth a small follow-up for the osx shared-lib PGO leftover.
Artifact compare vs pkgs/main
|
| What | Staging 3.15 | pkgs/main 3.14.7 | Action |
|---|---|---|---|
Shared libpython |
new output; python has no .so/.dylib |
so/dylib inside python; no libpython pkg |
Keep CF-align split |
GIL conda-site.pth |
missing | present | Keep missing (numba / CFEP-65) |
bin/python3.1 |
absent | present | 3.14 conda#10969 workaround; optional |
_sysconfigdata_*_conda_cos6_* |
absent | present | Keep dropped CentOS clones |
sre_{compile,parse,constants}.py |
absent | present | Expected — removed upstream in 3.15 |
_asyncio*.so/.pyd |
absent | present | Expected — folded into interpreter in 3.15 |
Lib/profiling/sampling/ (~81 files) |
present | absent | Expected — new in 3.15 |
_math_integer, xxlimited_3_13 |
present | absent | Expected — new 3.15 modules |
| Win layout | lib/python/ + lib-dynload/ |
Lib/ + DLLs/ |
Keep CFEP-27 |
cpython noarch |
present | absent | Keep CF-align metapackage |
| win-arm64 | no artifacts | GIL + FT on main | PBP pool, not recipe |
Shebangs / _sysconfig* / conda-meta differ by prefix and by version. Cannot match across CIs or minors.
Why binaries differ (do not “fix” to 3.14)
- Different CPython (3.15.0rc2 ≠ 3.14.7). Interpreter /
.sobytes will never match. - Pin floors only:
libexpat2.8.5 vs 2.8.2,sqlite3.53.4 vs 3.53.2,ncurses6.6 vs 6.5,openssl3.5.8 vs 3.5.7. Same family as 3.14.7, not CF 8.6/glibc 2.17. - C-API headers renamed (
lock.h→pylock.h,typeslots.h→slots.h). - pkgconfig filenames carry the version (
python-3.15*.pcvspython-3.14*.pc).
win-arm64 (recipe yes, this graph no)
build_base.bat already sets PLATFORM=ARM64 / BUILD_PATH=arm64 (arm64t for FT) — the 3.14 #240 port. No extra LLVM override (3.15 upstream is 21).
PBP /check-queue lists win-amd64 only. Perseverance-skills: win-arm64 “(soon)”. 3.14.7 on main proves host deps work (ucrt, vc14, tk 9, openssl 3.5). This SHA never scheduled that subdir.
Bottom line
File names (Unix, version-normalized): aligned except CF-align split (libpython out of python), dropped cos6 sysconfig / python3.1, and 3.15 stdlib adds (profiling/, _math_integer).
File bytes: will never match 3.14.7 — different interpreter. That is expected, not a #256 regression.
Win is a layout rewrite (CFEP-27), not missing modules. Optional later: win-arm64 once PBP has a worker. Do not chase 3.14 paths or CF bytes.
Replay #256 topology on origin/master without merge 2a73320. Keep master patch numbering (0028 site.pth, 0029 zlib-ng, 0030 xxlimited). Wrap win FT patches in freethreading jinja; add CF conda-forge#928 libpython unix weak run_exports. Refs: PKG-15601
Keep build_type: release only in conda_build_config.yaml. Debug interpreter remains a PKG-2624 spike, not this CF-align PR. Refs: PKG-15601
Auto-bump must track every output from the CF-align split. Refs: PKG-15601
Debug variants stay on ad-testing/label/py315. Disable before any pkgs/main / stable 3.15.0+ release (PKG-2624). Refs: PKG-15601
Debug builds are exclusive to python-feedstock#258 / PKG-2624. Refs: PKG-15601
pyexpat overlinks libexpat 2.8.5; host expat has no run_exports, so the python output never got a run req. Same fix as #258. Refs: PKG-15601
This reverts commit 226ab8c.
Refs: PKG-15601
cffd5c1 to
ed13f25
Compare
|
Review #259 first (C16+C17 libpython split vs This PR (#256) is now based on Dest remains |
Destination channel: ad-testing/label/py315
Links
main@ 3.15.0rc2 (#885, #928)Explanation of changes:
Align the 3.15.0rc2 recipe with conda-forge
main, reconstructed onorigin/masterafter #257. Conflict merge2a733207(stray{% endif %}) was discarded.Outputs / install split
libpython(install_shared.sh) andlibpython-static(install_static.sh). Deleted unusedbuild_static.sh/build_static.bat.pythondoes not installlibpython*.so/.dylib; tests assert those files are absent. Shared libpython is thelibpythonoutput.libpython3.dylibstable-ABI reexport ininstall_shared.sh(blob5dafbd13). Tests:libpython3${SHLIB_EXT}on unix release;libpython3.dylibon osx.libpythonunix weakrun_exportspin_subpackage("libpython", min_pin="x.x", max_pin="x").cpythonnoarch metapackage;python-freethreading/python-gil/python-jitkept.python_site_packages_pathset.ignore_run_exports_fromcxx on libpython outputs (unix).libpython-staticforce_use_keys:freethreading,build_type.CBC / variants (
recipe/conda_build_config.yaml)gil_type→freethreading: yes/noandPY_FREETHREADING. FT is built on all platforms (s390x / osx-64 skip removed).build_type: releaseonly. Unix debug is not in this PR — exclusive to #258 / PKG-2624.python/numpy/is_freethreading/is_python_min; tk9.0; osx clang 21.recipe/meta.yamlbuild_number1.source:is url + sha256 + patches only (nofrom_source_control/ git_url wrapper).gil_type,PY_GIL_DISABLED,bootstrap,linkage_nature.{% if freethreading == "yes" %}.Python_FIND_ABI(cmake_test_args). Win import-lib tests cover bothlib\andlibs\(CFEP-27 / CF keep import libraries in libs to help meson and other build systems conda-forge/python-feedstock#918).channel_targetstuple for the linter;'conda-forge' in channel_targetsis false so CFskip_compile_pyc/ branding / downstreams jinja does not fire.Build scripts
build_base.sh: shared vs static split (SYSCONFIG /build-details.jsonfrom shared build, CF LDLIBRARY is set to libpython3.9a although no static lib is included in mambaforge for Linux conda-forge/python-feedstock#565).llvm-tools-21via$HOST-llvm-ar→llvm-ar-$LLVM_VER. Dropped dead--with-tcltk-includes/--with-tcltk-libs(unrecognized in 3.15.0rc2;_tkintervia pkg-config). Dropped CentOSOLD_HOST/conda_cos6/conda_cos7sysconfig clones; system-gcc rewrite uses$HOST. JIT still off for debug, FT, and non-*-64.build_base.bat:PY_GIL_DISABLED→PY_FREETHREADING. Win tk stillTclVersion=%tk%/TkVersion=%tk%(tk 9). CF cross MSBuild block left commented (AR native workers).Tests / other
case $PKG_NAME(static or shared), notrm *.athen relink.run_test_jit.py: skip (exit 0) when this interpreter was built without JIT; fail if JIT exists but is not enabled.python-jitstill skipped for FT..gitignore: drop.vscode/.Frozen AR-delta vs conda-forge (intentionally not copied)
%THREAD%tkinter lib).llvm-tools-21(not unversionedllvm-tools)._python_rc; nochannel_sources: python_rc/python_debugzip.msys2-gcc-libs; nobinutils_impl/patch/m2-patch.downstreamscommented;cmake-no-system/ninja-base/make.missing_dsowhitelist.Notes:
ad-testing/label/py315only. Do not merge to pkgs/main.parsing_jinja_failureis skipped (freethreading/ dummychannel_targets). Graph generate must succeed; the linter skip may stay red.libpython3.sois empty upstream (cpython#104612); we follow CF and only testlibpython3${SHLIB_EXT}on unix release.