NumPy 2.5.0 вышел 21 июня 2026 года и стал переходным релизом для экосистемы научного Python: пакет больше не поддерживает Python 3.11, убирает numpy.distutils и закрывает часть устаревших API из ветки 2.0.x. Для обычных пользователей это означает более строгие требования к окружению, а для разработчиков библиотек — проверку сборки, типов и старого кода перед обновлением.

NumPy 2.5.0 закрепляет переход экосистемы на Python 3.12 и новее
NumPy — это базовая библиотека Python для быстрых вычислений с массивами, матрицами и числовыми данными. На ней держатся pandas, SciPy, scikit-learn, PyTorch-интеграции, JAX-инструменты и множество внутренних аналитических пайплайнов в компаниях. Поэтому даже «технический» релиз NumPy быстро становится заметным событием для всей Python-экосистемы.
Согласно странице проекта на PyPI, NumPy 2.5.0 опубликован 21 июня 2026 года и требует Python 3.12 или новее. На GitHub релиз v2.5.0 также датирован 21 июня 2026 года. В официальных release notes разработчики называют эту версию переходной: она завершает несколько старых циклов совместимости и готовит основу для следующих версий Python.
Главное практическое изменение — поддерживаемый диапазон Python теперь ограничен версиями 3.12–3.14. Если проект всё ещё работает на Python 3.11, установка свежего NumPy через обычное обновление зависимостей уже может упереться в ограничение версии интерпретатора.
Удаление numpy.distutils затронет пакеты с C, C++ и Fortran-расширениями
Самое заметное изменение для разработчиков научных библиотек — удаление numpy.distutils. Этот механизм долго использовался для сборки расширений на C, C++ и Fortran, особенно в проектах, которым нужны BLAS/LAPACK, Fortran-код или сложная компиляция нативных модулей.
В документации NumPy отдельно указано, что numpy.distutils удалён именно в версии 2.5.0. В качестве путей миграции разработчики предлагают современные сборочные системы: Meson с meson-python, CMake со scikit-build-core, а для более простых расширений — setuptools. Такой переход особенно важен для библиотек, где есть собственные .c, .cpp, .f90 или вложенные setup.py.
Для конечного пользователя это изменение чаще всего проявится косвенно. Если зависимость проекта ещё собирается через numpy.distutils, проблема появится во время установки или сборки колёс. На практике это означает, что старые научные пакеты, внутренние корпоративные библиотеки и давно не обновлявшиеся исследовательские проекты могут потребовать правок в build-сценариях.
Поддержка Python 3.11 прекращена вместе с чисткой устаревших API
NumPy 2.5.0 удаляет ряд возможностей, которые были помечены как устаревшие в предыдущих версиях. В release notes отдельно перечислены expired deprecations: среди них удаление numpy.distutils, прекращение поддержки 2D-векторов в numpy.cross, удаление numpy.row_stack в пользу numpy.vstack, удаление recfromtxt и recfromcsv из numpy.lib._npyio в пользу numpy.genfromtxt.
Для большого прикладного кода такие изменения обычно выглядят как небольшие поломки в редких местах. Например, старый импорт или вызов функции работал годами, а после обновления NumPy превращается в ошибку. Чем больше проект опирался на предупреждения из ветки 2.0.x и откладывал исправления, тем выше шанс, что переход на 2.5.0 потребует отдельного прохода по тестам.
В релизе также появились новые предупреждения о будущих изменениях. NumPy начинает мягко отучать код от изменения dtype, shape и размера массива «на месте», потому что такие операции небезопасны в сценариях, где массив может быть общим для нескольких частей программы или потоков. Более явные операции вроде array.view(...), np.reshape(...) и np.resize(...) делают поведение кода понятнее.
Descending-сортировки приближают NumPy к Array API
В NumPy 2.5.0 появилась поддержка сортировок по убыванию через параметр descending=True в нескольких местах. Разработчики отдельно отмечают поддержку descending для numpy.partition и numpy.argpartition; для массивов с dtype object аналогичный режим теперь доступен в np.sort и np.argsort.
Для читателя без технического бэкграунда смысл такой: раньше сортировка по убыванию часто требовала дополнительного шага — отсортировать по возрастанию и затем перевернуть результат. Новый параметр делает намерение кода прямым: сортировка сразу описывает нужный порядок.
Есть нюанс производительности: для partition и argpartition в режиме descending=True SIMD-оптимизации пока не используются, поэтому такие операции могут быть медленнее, чем сортировка по возрастанию. Это важно для кода, где сортировка больших массивов находится внутри горячего участка вычислений.
Улучшения для free-threaded Python готовят NumPy к параллельным сценариям
В списке ключевых изменений NumPy 2.5.0 указано улучшение поддержки free-threading. Речь идёт о направлении развития Python, где код может эффективнее использовать несколько потоков без привычных ограничений глобальной блокировки интерпретатора в отдельных сборках CPython.
Для большинства пользователей это пока выглядит как инфраструктурная работа. Библиотека заранее ужесточает правила вокруг небезопасных мутаций массивов и улучшает внутреннюю совместимость с более параллельным Python. Именно поэтому в релизе заметны предупреждения про изменение формы, типа и размера массива «на месте»: такие приёмы сложнее безопасно поддерживать, когда один объект может использоваться в разных потоках.
В долгосрочной перспективе это важно для серверной аналитики, ML-инструментов, численных пайплайнов и приложений, где Python пытаются активнее использовать в многопоточных задачах. NumPy 2.5.0 делает ещё один шаг в сторону такой модели, хотя мгновенного ускорения обычного кода ждать от самого факта обновления не стоит.
Итог
Перед переходом на NumPy 2.5.0 важно учитывать версию Python и состояние зависимостей. Если вы используете Python 3.12–3.14, обновление будет доступно без проблем. Однако проекты с нативными расширениями, старыми build-сценариями и устаревшими вызовами NumPy лучше протестировать отдельно.
Для проектов на Python 3.12–3.14 обновление проходит без проблем. Но если в вашем коде есть нативные расширения, старые build-сценарии или устаревшие функции NumPy, лучше протестировать их в отдельной ветке.
Для библиотек с C, C++ и Fortran-компонентами главный риск связан с numpy.distutils. Если сборка ещё зависит от него, миграцию придётся выполнить до стабильного перехода на новую ветку NumPy. Для прикладных проектов без нативных расширений наиболее вероятны точечные исправления: замена удалённых функций, чистка старых импортов и обновление ограничений в pyproject.toml или requirements.txt.
NumPy 2.5.0 — это релиз, который закрывает технические проблемы после ветки 2.0 и одновременно ускоряет переход экосистемы на более свежие версии Python. Для новых проектов это естественный этап развития платформы, а для старых научных стеков — хорошая возможность проверить, готовы ли их сборки и зависимости к следующему циклу обновления Python.