Repository navigation
Conversation
|
Hi! This is the friendly automated conda-forge-linting service. I just wanted to let you know that I linted all conda-recipes in your PR ( I do have some suggestions for making it better though... For recipe/meta.yaml:
This message was generated by GitHub Actions workflow run https://github.com/conda-forge/conda-forge-webservices/actions/runs/37564196210. Examine the logs at this URL for more detail. |
<details><summary>Claude's draft</summary> libedit had no global pin, so each feedstock built against whatever libedit version was latest at build time. Pin it to '3.1', matching the x.x upper bound in libedit's run_exports (the date component changes on every release without an ABI break; soname has stayed libedit.so.0). This gives consistent host versions across feedstocks and a place to start a migration if a 3.2 / soname bump ever happens. No migration is needed now since all existing builds are 3.1. Motivated by conda-forge/python-feedstock#936, which switches python's readline module from GNU readline to libedit. Resume this Claude session: ``` cd /home/mark/git/feedstock/python-feedstock claude --resume 6596da16-c7f8-423a-8123-3dde1ed72ef3 ``` </details>
|
@conda-forge-admin, rerender |
|
@conda-forge-admin please rerender |
|
Hi! This is the friendly automated conda-forge-webservice. I tried to rerender for you, but it looks like there was nothing to do. This message was generated by GitHub Actions workflow run https://github.com/conda-forge/conda-forge-webservices/actions/runs/37556995841. Examine the logs at this URL for more detail. |
<details><summary>Claude's draft</summary> Swap GNU readline (GPL-3) for NetBSD libedit as the backend of the `readline` module on unix. - recipe/meta.yaml: `readline` -> `libedit` in host, and in build when cross-compiling. The line carries no version bound; libedit has no global pin, so its run_exports provide the runtime constraint. - recipe/build_base.sh: pass `--with-readline=editline` to configure. - recipe/run_test.py: assert `readline.backend == "editline"` so that a configure fallback to GNU readline, or to no readline module at all, fails the tests instead of passing silently. This is conda-forge's `libedit` (editline/readline.h, -ledit), which is what CPython's `--with-readline=editline` expects, not the troglobit `editline` package. Resume this Claude session: ``` cd /home/mark/git/feedstock claude --resume 7ff2fa23-4419-41f9-a79e-e91603337a97 ``` </details>
…2026.10.06.17.21.00 Other tools: - conda-build 26.9.0 - rattler-build 0.76.1 - rattler-build-conda-compat 1.4.19
|
rebased and ready to go. thx @isuruf and @h-vetinari |
I would really love to revive this effort.
I don't think many of the original objections were right, and now that uv has shipped with libedit support, i feel like there is a strong precedence for this.
I'm waiting on conda-forge/libedit-feedstock#15 to mark this PR as ready for review
Claude's write-up
This depends on conda-forge/libedit-feedstock#15. conda-forge's current
libedit(3.1.20250104) re-sends signals withkill(0, signo), which signals the whole process group. With CPython on libedit, Ctrl-C then turns into an endlessKeyboardInterruptloop when python runs under another process such asuv run(astral-sh/uv#13919). #15 updates libedit to20260512, which callsraise(signo)instead. This PR stays in draft until that update is merged and published.Why reprioritize this now
#387 (open since 2020) asks for a way to use python without GPL-3 readline. Past discussion (#191, #192, #387, conda-forge/sqlite-feedstock#30) stalled because of concerns that libedit is "an incomplete readline clone". Since then, two major Python distributions have switched to libedit on Linux, not only macOS:
--with-readline=editlineunconditionally for python@3.11+ and depends on its own libedit on Linux (uses_from_macos "libedit", formula). The stated reason is licensing.Since 3.13 the default interactive REPL is
_pyrepl, which does its own line editing, history, completion and bracketed paste without readline or libedit (PEP 762). That reduces the user-visible risk.GNU readline has also caused problems of its own here: conda-forge/readline-feedstock#35 was conda's
libreadline.so.8shadowing the system copy and breaking the system/bin/sh. libedit's library islibedit.so.0, so it can't clash like that.Changes
recipe/meta.yaml:readline→libeditin host, and in build when cross-compiling (unix only).recipe/build_base.sh: add--with-readline=editline.recipe/run_test.py:assert readline.backend == "editline". Without it, a configure fallback to GNU readline or to no readline module would pass the tests.readlinepin drops out of.ci_support.libedithas no global pin, so itsrun_exports(>=3.1.x,<3.2) provides the bound.This uses NetBSD libedit (conda-forge
libedit,editline/readline.h,-ledit), which is what CPython's--with-readline=editlineexpects. It is not conda-forge'seditlinepackage, which is troglobit/editline. CPython doesn't support that one, and it lacks about 30 functionsModules/readline.cneeds.Local testing
linux_64_build_typereleasechannel_targetsconda-forge_mainfreethreadingnobuilt in docker withbuild-locally.py, against libedit20250104.checking how to link readline... edit.readline.cpython-315-x86_64-linux-gnu.solinkslibedit.so.0. Thepythonpackage depends onlibedit >=3.1.20250104,<3.2.0a0and no longer onreadline.Known behavior differences
These matter only when the readline backend is used:
PYTHON_BASIC_REPL, input that isn't a terminal,input(),pdb/cmd, thesqlite3CLI.~/.editrc, not~/.inputrc. Third-partyreadline.parse_and_bind("tab: complete")silently does nothing; the stdlib'ssite,cmd,pdbandsqlite3branch onreadline.backendand handle it._HiStOrY_V2_header,\040escapes). Existing GNU-format~/.python_historyfiles are unreadable in the basic REPL._pyreplreads both formats.set history-sizetest;get_begidx/get_endidxcount characters instead of bytes for non-ASCII input; Ctrl-C in Ctrl-R search needs three presses (CTRL+C/KeyboardInterrupt in editline not working properly on macOS REPL python/cpython#100610).TODO before leaving draft
20260512.readlinewithout declaring it need attention.