К обсуждениям

Python 3.14.7: wide curses распознаётся даже без имени ncursesw

Редакция VOne Технологии

Python 3.14.7: wide curses распознаётся даже без имени ncursesw. Практическая инструкция отделяет симптом от соседних причин: синтетический fixture, отрицательный control, таблица наблюдений, критерий остановки и минимальный пакет для поддержки без production-данных.

Узкая граница исправления

Прямой ответ относится к одной границе: Python собирает curses against wide-capable ncurses даже при другом имени библиотеки, например в pkgsrc или системной macOS-связке. Практический симптом, который надо отличить от соседних причин: Системная curses поддерживает wide characters, но её файл не называется ncursesw, поэтому сборка Python ошибочно получалась narrow и ломала ожидаемую Unicode-ветку. Поэтому статья не предлагает угадывать по названию модуля. Она отвечает на намерение «как проверить wide-character curses build, когда библиотека называется не ncursesw, в Python 3.14.7» через короткий A/B-протокол, где отрицательный control важнее совпавшего текста ошибки. Массовость проблемы и пригодность обновления для конкретного проекта источниками не установлены.

Паспорт наблюдения

Паспорт наблюдения T22-17 начинается не с обновления, а с воспроизводимого шага: зафиксировать configure output и link map, затем под pty проверить addstr/instr с одной Unicode-меткой, не полагаясь на filename библиотеки. Запускайте его в temp root, child process, pty, локальном stub или VM — в зависимости от требуемой поверхности. Назначьте лимит времени и ресурсов до старта. Сохраните только измеримые поля, а не полный environment dump; если нужная сборка, display, libc или optional module отсутствует, пометьте environment blocker и не имитируйте результат.

Сравнение без догадки

Не принимайте один удачный case. Выполните независимую ветку: провести ASCII round-trip, сравнить сборку с явно narrow library и повторить wide-case в чистой terminal session. Таблица наблюдений: «library path | detected width | configure flags | test glyph bytes | decoded result | locale | terminal restore». Сравнивайте не впечатление, а тип результата, состав данных и границы времени. Повторите отрицательный control после target-ветки; расхождение говорит о скрытом состоянии, а не об исправлении Python.

Правило зелёной ветки

Решение принимается по правилу: capability probe и Unicode round-trip подтверждают wide build независимо от basename linked library. Не путайте его с «процесс не упал» или «текст ошибки другой». Если target чист, но control не различает две гипотезы, добавьте наблюдение, а не новую статью. Если обновление меняет ещё зависимости, такой прогон не изолирует gh-154070; сначала восстановите одинаковую среду.

Красные флаги

Остановите опыт при первом условии: не делать вывод по названию файла и не менять системную curses; остановиться без pty, корректной locale или восстановления terminal. Не продолжайте после crash ради «ещё одного подтверждения». Верните среду к baseline: закройте socket/pty, уничтожьте root, завершите только созданный child, удалите temp fixture и проверьте resource inventory. Если rollback нельзя доказать, материал остаётся кандидатом и не должен публиковаться как прошедший проверку.

Минимальный тикет

Минимальный тикет состоит из: версии Python/curses, сокращённый link path, configure flags, repr одной тестовой метки и результат round-trip. Отдельно приложите строки control/target/repeat и отметьте, на какой фазе возникло отклонение. Не присылайте реальные payload, credential или полный crash dump. Такой пакет позволяет воспроизвести границу gh-154070 без доступа к вашей инфраструктуре.

Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.