From 20129c7a39b2d675337449095dd8cc5ea9275910 Mon Sep 17 00:00:00 2001 From: Mark Harfouche Date: Tue, 22 Sep 2026 15:39:52 -0400 Subject: [PATCH 1/2] Build readline module against libedit instead of GNU readline
Claude's draft Replace the GPL-licensed GNU readline host/build dependency with the BSD-licensed NetBSD libedit (conda-forge `libedit`) on unix, and pass `--with-readline=editline` to configure so CPython's readline module uses its libedit backend (editline/readline.h, -ledit). The test now asserts `readline.backend == "editline"` so a silent configure fallback (to GNU readline or to no readline module) fails the build instead of passing unnoticed. Resume this Claude session: ``` cd /home/mark/git/feedstock/python-feedstock claude --resume 6596da16-c7f8-423a-8123-3dde1ed72ef3 ```
--- recipe/build_base.sh | 1 + recipe/meta.yaml | 4 ++-- recipe/run_test.py | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/recipe/build_base.sh b/recipe/build_base.sh index d4bb1c5fe..9a28cacf7 100644 --- a/recipe/build_base.sh +++ b/recipe/build_base.sh @@ -259,6 +259,7 @@ _common_configure_args+=(--with-tcltk-includes="-I${PREFIX}/include") _common_configure_args+=("--with-tcltk-libs=-L${PREFIX}/lib -ltcl${TCLTK_VER} -ltk${TCLTK_VER}") _common_configure_args+=(--with-platlibdir=lib) _common_configure_args+=(--with-system-libmpdec=yes) +_common_configure_args+=(--with-readline=editline) if [[ "${PY_INTERP_DEBUG}" == "yes" || "${target_platform}" != *"-64" || ${PY_FREETHREADING} == yes ]]; then _common_configure_args+=(--enable-experimental-jit=no) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index c30fb4c35..74a4f2029 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -193,7 +193,7 @@ outputs: - libxcrypt # [build_platform != target_platform and linux] - ncurses # [build_platform != target_platform and unix] - openssl # [build_platform != target_platform] - - readline # [build_platform != target_platform and unix] + - libedit # [build_platform != target_platform and unix] - tk # [build_platform != target_platform] - zlib # [build_platform != target_platform] - zstd # [build_platform != target_platform] @@ -208,7 +208,7 @@ outputs: - libsqlite - ncurses # [unix] - openssl - - readline # [unix] + - libedit # [unix] - tk # These two are just to get the headers needed for tk.h, but is unused - xorg-libx11 # [unix] diff --git a/recipe/run_test.py b/recipe/run_test.py index 79a5df6a6..3948367d8 100644 --- a/recipe/run_test.py +++ b/recipe/run_test.py @@ -85,6 +85,7 @@ import fcntl import grp import readline + assert readline.backend == "editline", readline.backend import resource import syslog import termios From a654df03b7e2ba7995819d2daf10567e4f9d382f Mon Sep 17 00:00:00 2001 From: Mark Harfouche Date: Tue, 22 Sep 2026 15:40:33 -0400 Subject: [PATCH 2/2] MNT: Re-rendered with conda-smithy 2026.9.19 and conda-forge-pinning 2026.09.22.09.39.50 Other tools: - conda-build 26.7.1 - rattler-build 0.75.0 - rattler-build-conda-compat 1.4.18 --- ...sconda-forge_python_debugfreethreadingno.yaml | 2 -- ...conda-forge_python_debugfreethreadingyes.yaml | 2 -- ...l_targetsconda-forge_mainfreethreadingno.yaml | 2 -- ..._targetsconda-forge_mainfreethreadingyes.yaml | 2 -- ...sconda-forge_python_debugfreethreadingno.yaml | 2 -- ...conda-forge_python_debugfreethreadingyes.yaml | 2 -- ...l_targetsconda-forge_mainfreethreadingno.yaml | 2 -- ..._targetsconda-forge_mainfreethreadingyes.yaml | 2 -- ...sconda-forge_python_debugfreethreadingno.yaml | 2 -- ...conda-forge_python_debugfreethreadingyes.yaml | 2 -- ...l_targetsconda-forge_mainfreethreadingno.yaml | 2 -- ..._targetsconda-forge_mainfreethreadingyes.yaml | 2 -- ...sconda-forge_python_debugfreethreadingno.yaml | 2 -- ...conda-forge_python_debugfreethreadingyes.yaml | 2 -- ...l_targetsconda-forge_mainfreethreadingno.yaml | 2 -- ..._targetsconda-forge_mainfreethreadingyes.yaml | 2 -- ...sconda-forge_python_debugfreethreadingno.yaml | 2 -- ...conda-forge_python_debugfreethreadingyes.yaml | 2 -- ...l_targetsconda-forge_mainfreethreadingno.yaml | 2 -- ..._targetsconda-forge_mainfreethreadingyes.yaml | 2 -- ...sconda-forge_python_debugfreethreadingno.yaml | 2 -- ...conda-forge_python_debugfreethreadingyes.yaml | 2 -- ...l_targetsconda-forge_mainfreethreadingno.yaml | 2 -- ..._targetsconda-forge_mainfreethreadingyes.yaml | 2 -- .scripts/run_win_build.bat | 3 ++- README.md | 16 ++++++++-------- 26 files changed, 10 insertions(+), 57 deletions(-) diff --git a/.ci_support/linux_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml b/.ci_support/linux_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml index 4c95beccf..6131ee48b 100644 --- a/.ci_support/linux_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml +++ b/.ci_support/linux_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-64 tk: diff --git a/.ci_support/linux_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml b/.ci_support/linux_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml index 47bd71b1f..585092410 100644 --- a/.ci_support/linux_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml +++ b/.ci_support/linux_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-64 tk: diff --git a/.ci_support/linux_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml b/.ci_support/linux_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml index e2e3035b5..ea8c99dda 100644 --- a/.ci_support/linux_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml +++ b/.ci_support/linux_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-64 tk: diff --git a/.ci_support/linux_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml b/.ci_support/linux_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml index ea597a1b9..0f05fb624 100644 --- a/.ci_support/linux_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml +++ b/.ci_support/linux_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-64 tk: diff --git a/.ci_support/linux_aarch64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml b/.ci_support/linux_aarch64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml index 870b06779..775b2632c 100644 --- a/.ci_support/linux_aarch64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml +++ b/.ci_support/linux_aarch64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-aarch64 tk: diff --git a/.ci_support/linux_aarch64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml b/.ci_support/linux_aarch64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml index 217c1ea52..8bd1675de 100644 --- a/.ci_support/linux_aarch64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml +++ b/.ci_support/linux_aarch64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-aarch64 tk: diff --git a/.ci_support/linux_aarch64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml b/.ci_support/linux_aarch64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml index a6ea06bf6..999d90454 100644 --- a/.ci_support/linux_aarch64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml +++ b/.ci_support/linux_aarch64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-aarch64 tk: diff --git a/.ci_support/linux_aarch64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml b/.ci_support/linux_aarch64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml index 78641511d..d64e6b6af 100644 --- a/.ci_support/linux_aarch64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml +++ b/.ci_support/linux_aarch64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-aarch64 tk: diff --git a/.ci_support/linux_ppc64le_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml b/.ci_support/linux_ppc64le_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml index 576869d72..b1dd96ea2 100644 --- a/.ci_support/linux_ppc64le_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml +++ b/.ci_support/linux_ppc64le_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-ppc64le zip_keys: diff --git a/.ci_support/linux_ppc64le_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml b/.ci_support/linux_ppc64le_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml index 350ea0ed1..44be730f3 100644 --- a/.ci_support/linux_ppc64le_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml +++ b/.ci_support/linux_ppc64le_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-ppc64le zip_keys: diff --git a/.ci_support/linux_ppc64le_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml b/.ci_support/linux_ppc64le_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml index 10d8f2270..64e82d5a8 100644 --- a/.ci_support/linux_ppc64le_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml +++ b/.ci_support/linux_ppc64le_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-ppc64le zip_keys: diff --git a/.ci_support/linux_ppc64le_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml b/.ci_support/linux_ppc64le_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml index f9f14e421..4cd7e4cb1 100644 --- a/.ci_support/linux_ppc64le_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml +++ b/.ci_support/linux_ppc64le_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-ppc64le zip_keys: diff --git a/.ci_support/linux_riscv64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml b/.ci_support/linux_riscv64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml index 3305c30e1..1c7cde114 100644 --- a/.ci_support/linux_riscv64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml +++ b/.ci_support/linux_riscv64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-riscv64 tk: diff --git a/.ci_support/linux_riscv64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml b/.ci_support/linux_riscv64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml index a7b63dec9..c56da4409 100644 --- a/.ci_support/linux_riscv64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml +++ b/.ci_support/linux_riscv64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-riscv64 tk: diff --git a/.ci_support/linux_riscv64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml b/.ci_support/linux_riscv64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml index 9e00069a7..fd25535a0 100644 --- a/.ci_support/linux_riscv64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml +++ b/.ci_support/linux_riscv64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-riscv64 tk: diff --git a/.ci_support/linux_riscv64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml b/.ci_support/linux_riscv64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml index fb143530f..3768f677b 100644 --- a/.ci_support/linux_riscv64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml +++ b/.ci_support/linux_riscv64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml @@ -42,8 +42,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - linux-riscv64 tk: diff --git a/.ci_support/osx_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml b/.ci_support/osx_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml index b22c8ce8f..591dd8d2d 100644 --- a/.ci_support/osx_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml +++ b/.ci_support/osx_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml @@ -44,8 +44,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - osx-64 tk: diff --git a/.ci_support/osx_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml b/.ci_support/osx_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml index 8081bb371..deb005fc1 100644 --- a/.ci_support/osx_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml +++ b/.ci_support/osx_64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml @@ -44,8 +44,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - osx-64 tk: diff --git a/.ci_support/osx_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml b/.ci_support/osx_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml index faf5424fc..416c76b65 100644 --- a/.ci_support/osx_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml +++ b/.ci_support/osx_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml @@ -44,8 +44,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - osx-64 tk: diff --git a/.ci_support/osx_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml b/.ci_support/osx_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml index 3c1ea6b56..3a417fca5 100644 --- a/.ci_support/osx_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml +++ b/.ci_support/osx_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml @@ -44,8 +44,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - osx-64 tk: diff --git a/.ci_support/osx_arm64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml b/.ci_support/osx_arm64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml index 324bdc788..d74f48c33 100644 --- a/.ci_support/osx_arm64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml +++ b/.ci_support/osx_arm64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingno.yaml @@ -44,8 +44,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - osx-arm64 tk: diff --git a/.ci_support/osx_arm64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml b/.ci_support/osx_arm64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml index 1a8f3fcca..3436b1f83 100644 --- a/.ci_support/osx_arm64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml +++ b/.ci_support/osx_arm64_build_typedebugchannel_targetsconda-forge_python_debugfreethreadingyes.yaml @@ -44,8 +44,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - osx-arm64 tk: diff --git a/.ci_support/osx_arm64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml b/.ci_support/osx_arm64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml index 55fa2bbfe..9040e4f7f 100644 --- a/.ci_support/osx_arm64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml +++ b/.ci_support/osx_arm64_build_typereleasechannel_targetsconda-forge_mainfreethreadingno.yaml @@ -44,8 +44,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - osx-arm64 tk: diff --git a/.ci_support/osx_arm64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml b/.ci_support/osx_arm64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml index ba3872ab0..54eee4bc2 100644 --- a/.ci_support/osx_arm64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml +++ b/.ci_support/osx_arm64_build_typereleasechannel_targetsconda-forge_mainfreethreadingyes.yaml @@ -44,8 +44,6 @@ pin_run_as_build: max_pin: x.x python: - '3.15' -readline: -- '8' target_platform: - osx-arm64 tk: diff --git a/.scripts/run_win_build.bat b/.scripts/run_win_build.bat index 06f61b83b..6a6309e57 100755 --- a/.scripts/run_win_build.bat +++ b/.scripts/run_win_build.bat @@ -42,7 +42,8 @@ call :start_group "Configuring conda" :: Activate the base conda environment echo Activating environment -call "%MINIFORGE_HOME%\Scripts\activate.bat" +set "CONDA_EXE=%MINIFORGE_HOME%\Scripts\conda.exe" +call "%MINIFORGE_HOME%\condabin\conda.bat" activate "%MINIFORGE_HOME%" :: Configure the solver set "CONDA_SOLVER=libmamba" if !errorlevel! neq 0 exit /b !errorlevel! diff --git a/README.md b/README.md index 3e5e9ac55..1756faa73 100644 --- a/README.md +++ b/README.md @@ -145,10 +145,10 @@ Current release info Installing python ================= -Installing `python` from the `conda-forge` channel can be achieved by adding `conda-forge` to your channels with: +Installing `python` from the `conda-forge/label/python_debug` channel can be achieved by adding `conda-forge/label/python_debug` to your channels with: ``` -conda config --add channels conda-forge +conda config --add channels conda-forge/label/python_debug conda config --set channel_priority strict ``` @@ -194,7 +194,7 @@ It is possible to list all of the versions of `cpython` available on your platfo With conda ``` -conda search cpython --channel conda-forge +conda search cpython --channel conda-forge/label/python_debug ``` @@ -203,7 +203,7 @@ conda search cpython --channel conda-forge With mamba ``` -mamba search cpython --channel conda-forge +mamba search cpython --channel conda-forge/label/python_debug ``` @@ -212,7 +212,7 @@ mamba search cpython --channel conda-forge With pixi ``` -pixi search cpython --channel conda-forge +pixi search cpython --channel conda-forge/label/python_debug ``` @@ -222,13 +222,13 @@ pixi search cpython --channel conda-forge ``` # Search all versions available on your platform: -mamba repoquery search cpython --channel conda-forge +mamba repoquery search cpython --channel conda-forge/label/python_debug # List packages depending on `cpython`: -mamba repoquery whoneeds cpython --channel conda-forge +mamba repoquery whoneeds cpython --channel conda-forge/label/python_debug # List dependencies of `cpython`: -mamba repoquery depends cpython --channel conda-forge +mamba repoquery depends cpython --channel conda-forge/label/python_debug ```