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

Python 3.15 RC1: старые Py_Get* заменены на PyConfig_Get

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

Практическая миграционная проверка Python 3.15 RC1 для gh-133644: отдельный обратимый fixture, таблица наблюдений, отрицательный контроль, стоп-линия и обезличенный пакет для повтора.

Граница изменения: 133644

Набор старых initialization-функций Py_GetExecPrefix, Py_GetPath, Py_GetPrefix, Py_GetProgramFullPath, Py_GetProgramName и Py_GetPythonHome удалён в пользу PyConfig_Get с именованными ключами. Это подтверждает границу интерфейса, но не доказывает наличие дефекта в конкретном проекте. Отдельная пользовательская боль здесь такая: Embedder может не собраться или перепутать base_prefix с prefix в virtual environment; механическая замена каждого Py_Get* на один ключ скроет разницу базовой и активной среды. Перед опытом запишите версию interpreter, точную точку вызова и ожидаемую ветку. RC1 остаётся preview: изолируйте его от рабочего интерпретатора.

Обратимый тест одного контракта

Минимальный стенд для этой боли: Соберите маленький embedder, который после инициализации читает base_exec_prefix, exec_prefix, module_search_paths, base_prefix, prefix, executable и home через PyConfig_Get; запустите его вне и внутри venv с одним и тем же кодом. Все входы должны быть синтетическими, короткими и воспроизводимыми. Положительный и отрицательный controls запускайте в свежих объектах или процессах, если cache, import state или lifetime могут перенести эффект. Cleanup должен удалять только созданный temp-root и не касаться рабочих данных.

Таблица наблюдений и отрицательный контроль

Для каждого запуска заполняйте строку «ключ PyConfig_Get | тип результата | base environment | venv | соответствующий sys attribute | error cleanup». Сначала выполните baseline на прежней поддерживаемой версии, затем RC1 и снова свежий baseline, если опыт мог изменить состояние. Пустое поле не равно нулю, отсутствие исключения не подтверждает верное значение, а расхождение повторов означает unstable, а не разрешение выбрать удобную строку.

Зелёный критерий и стоп-линия

Статус passed допустим, только если все семь ключей читаются через один проверенный helper, их значения совпадают с точно названными sys-атрибутами, а base/prefix предсказуемо расходятся в venv. Отметка not reproduced говорит только об этом fixture; blocked — о нехватке источника или capability. Стоп-линия для этой миграции: Не выводите полные module_search_paths и home в общие CI-логи: для сверки достаточно типа, числа элементов и обезличенных базовых имён; перенос в production требует отдельного embedding-теста. Нельзя получать зелёный результат broad except, отключением защиты, скрытием warnings или повторением до случайного успеха.

Минимальный пакет для повтора

Для повтора передайте только: C-файл embedder, compiler/linker флаги, имена ключей, типы и обезличенные summaries в двух средах, exit status и cleanup. Добавьте московский timestamp, точную версию 3.15.0rc1, команду воспроизведения и заранее заданный критерий. Удалите usernames, hostnames, IP, абсолютные домашние пути, tokens, cookies, environment dumps, рабочие файлы и лишние журналы. Источники подтверждают change boundary, но не результ вашего опыта, не массовость боли и не будущую индексацию.

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

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

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

Ответы

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

Ваш ответ

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

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

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