Практическая миграционная проверка 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 с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные и вымышленные результаты тестов не использовались.
Источники и проверка
- What’s New in Python 3.15 проверено 2026-08-30
- CPython gh-133644 проверено 2026-08-30
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.