2025, Oct 19 23:16
Как установить gensim в Windows без сборки SciPy: используем Python 3.12
Как исправить ошибку установки gensim в Windows, когда pip пытается собрать SciPy и падает из‑за Fortran. Простое решение: создайте окружение на Python 3.12.
Установка gensim в Windows может неожиданно срываться из‑за ошибки сборки SciPy, даже если инструментальная цепочка выглядит полной. Главный признак — сбой генерации метаданных для SciPy во время pip install. В этом материале объясняется, что происходит, и как добиться чистой установки без борьбы с компиляторами.
Что ломается и как это выглядит
Сбой обычно проявляется при запуске обычной команды установки. Сессия завершается ошибкой метаданных SciPy, в выводе присутствует Meson и многократные сообщения об отсутствии компилятора Fortran.
pip install gensim
Collecting gensim
  Using cached gensim-4.3.3.tar.gz (23.3 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting numpy<2.0,>=1.18.5 (from gensim)
  Using cached numpy-1.26.4.tar.gz (15.8 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Collecting scipy<1.14.0,>=1.7.0 (from gensim)
  Using cached scipy-1.13.1.tar.gz (57.2 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error
  × Preparing metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [...snip...]
      ERROR: Unknown compiler(s): [['ifort'], ['gfortran'], ['flang-new'], ['flang'], ['pgfortran'], ['g95']]
      Running `ifort --help` gave "Den angivne fil blev ikke fundet"
      Running `gfortran --help` gave "Den angivne fil blev ikke fundet"
[...snip...]
error: metadata-generation-failedЭта фраза на датском означает «Указанный файл не найден», что логично для ситуации без установленного компилятора.
Что на самом деле происходит
Gensim фиксирует зависимость от SciPy версии до 1.14.0, потому что использует приватный API SciPy, давно помеченный как устаревший и перенесённый в SciPy 1.14.0. На практике это означает, что pip пытается поставить SciPy 1.13.x, чтобы удовлетворить gensim. В Python 3.13 готовых колёс для SciPy 1.13.x нет — эта ветка SciPy не поддерживает Python 3.13. Тогда pip откатывается к сборке SciPy из исходников, что запускает Meson и проверку инструментов Fortran. Компилятор Fortran не находится — сборка прерывается уже на этапе подготовки метаданных.
Политика инструментальной цепочки SciPy подтверждает отсутствие сборок для такой пары Python/SciPy. См. дорожную карту Toolchain: https://docs.scipy.org/doc/scipy/dev/toolchain.html#numpy.
Практические варианты
Есть три простых пути. Можно использовать версию Python, которую поддерживает SciPy 1.13.1. Можно собрать SciPy 1.13.1 из исходников, смирившись со сложной настройкой цепочки Fortran в Windows. И можно изменить gensim, чтобы он работал с новым SciPy, избавившись от устаревшей зависимости. Все варианты рабочие, но различаются по трудозатратам и рискам.
Самый беспроблемный путь — запускать gensim на Python 3.12 или более старой версии, поддерживаемой SciPy 1.13.1. Так вы полностью избегаете сборки из исходников: есть готовые колёса.
Применяем самый простой вариант: используйте Python 3.12
Создайте окружение с Python 3.12 и установите gensim. Ниже — минимальные примеры для распространённых инструментов.
# С помощью conda
conda create -y -n gensim312 python=3.12
conda activate gensim312
pip install --upgrade pip
pip install gensim# Через venv (если предпочитаете pip/venv)
python3.12 -m venv .venv312
.venv312\Scripts\activate
python -m pip install --upgrade pip
pip install gensimПосле установки сделайте быстрый импорт‑чек: так вы убедитесь, что стек согласован и сборка SciPy из исходников не требуется.
python -c "import gensim, scipy; print(gensim.__version__, scipy.__version__)"Альтернативы (с оговорками)
Собрать SciPy 1.13.1 из исходников в Windows реально, но это непросто и потребует настроенного компилятора Fortran. Официальное руководство для этой версии: https://docs.scipy.org/doc/scipy-1.13.1/building/index.html. Готовьтесь к непростой процедуре, особенно если совмещаете старый SciPy с совсем свежим Python.
Ещё один вариант — переработать gensim под новый SciPy. Суть — отказаться от обращения к приватному API SciPy, который переехал в SciPy 1.14.0. Обсуждение здесь: https://github.com/piskvorky/gensim/issues/3623.
Почему это важно
Бинарная совместимость в научном стеке Python держится на согласованной поддержке версий NumPy, SciPy, компиляторов и самого Python. Одна единственная устаревшая фиксация в зависимости «выше по цепочке» может незаметно отправить установщик в режим сборки из исходников, где без нативных тулчейнов и компиляторов никак. Понимание этих ограничений экономит часы, которые иначе ушли бы на охоту за ошибками инструментария, не относящимися к вашей задаче.
Итоги
Если при установке gensim pip пытается собрать SciPy из исходников и падает на Meson или из‑за отсутствия компилятора Fortran, почти наверняка вы используете Python 3.13 вместе с фиксацией SciPy ниже 1.14.0. Самое эффективное решение — поставить и использовать Python 3.12 в этом окружении: так вы вернётесь к готовым колёсам SciPy и полностью избежите нативной сборки. Самостоятельная сборка SciPy или «заплатка» gensim тоже возможны, но это более тяжёлые пути. Следите за матрицами совместимости библиотек и трекерами проектов — так проще выбрать наименее сопротивляющийся маршрут, когда подобная фиксация всплывёт снова.
Статья основана на вопросе на StackOverflow от Choptdei и ответе Nick ODell.