Сборка из исходного кода#

Примечание

Если вы пытаетесь только установить SciPy, мы рекомендуем использовать бинарные файлы — см. Установка для подробностей об этом.

Сборка SciPy из исходного кода требует настройки системных зависимостей (компиляторы, библиотеки BLAS/LAPACK и т.д.) сначала, а затем запуска сборки. Сборка может выполняться для установки SciPy для локального использования, разработки самого SciPy или создания распространяемых бинарных пакетов. И может потребоваться настроить аспекты того, как выполняется сборка. Это руководство охватит все эти аспекты. Кроме того, оно предоставляет справочную информацию о том, как работает сборка SciPy, и ссылки на актуальные руководства по общей документации по сборке и упаковке Python, которая имеет отношение к делу.

Зависимости на уровне системы#

SciPy использует скомпилированный код для скорости, что означает необходимость компиляторов и некоторых других системных зависимостей (т.е., не-Python / не-PyPI) для сборки на вашей системе.

Примечание

Если вы используете Conda, вы можете пропустить шаги в этом разделе - за исключением установки компиляторов для Windows или Apple Developer Tools для macOS. Все остальные зависимости будут установлены автоматически mamba env create -f environment.yml команда.

Если вы хотите использовать системный Python и pip, вам потребуется:

  • Компиляторы C, C++ и Fortran (обычно gcc, g++, и gfortran).

  • Заголовочные файлы Python (обычно пакет с именем python3-dev или python3-devel)

  • Библиотеки BLAS и LAPACK. OpenBLAS является стандартным для SciPy; другие варианты включают ATLAS и MKL.

  • pkg-config для обнаружения зависимостей.

Для установки требований сборки SciPy можно сделать:

sudo apt install -y gcc g++ gfortran libopenblas-dev liblapack-dev pkg-config python3-pip python3-dev

В качестве альтернативы, вы можете сделать:

sudo apt build-dep scipy

Эта команда устанавливает всё необходимое для сборки SciPy, с тем преимуществом, что новые зависимости или обновления требуемых версий обрабатываются менеджерами пакетов.

Для установки требований сборки SciPy можно сделать:

sudo dnf install gcc-gfortran python3-devel openblas-devel lapack-devel pkgconfig

В качестве альтернативы, вы можете сделать:

sudo dnf builddep scipy

Эта команда устанавливает всё необходимое для сборки SciPy, с тем преимуществом, что новые зависимости или обновления требуемых версий обрабатываются менеджерами пакетов.

Для установки требований сборки SciPy можно сделать:

sudo yum install gcc-gfortran python3-devel openblas-devel lapack-devel pkgconfig

В качестве альтернативы, вы можете сделать:

sudo yum-builddep scipy

Эта команда устанавливает всё необходимое для сборки SciPy, с тем преимуществом, что новые зависимости или обновления требуемых версий обрабатываются менеджерами пакетов.

Для установки требований сборки SciPy можно сделать:

sudo pacman -S gcc-fortran openblas pkgconf

Установите Apple Developer Tools. Простой способ сделать это: откройте окно терминала, введите команду:

xcode-select --install

и следуйте инструкциям. Apple Developer Tools включает Git, компиляторы Clang C/C++, и другие утилиты разработки, которые могут потребоваться.

Выполнить не используйте системный Python macOS. Вместо этого установите Python с установщик python.org или с помощью менеджера пакетов, такого как Homebrew, MacPorts или Fink.

Другие системные зависимости, которые вам нужны, — это компилятор Fortran, библиотеки BLAS и LAPACK, а также pkg-config. Их проще всего установить с помощью Homebrew:

brew install gfortran openblas pkg-config

Чтобы инструменты сборки могли найти OpenBLAS, вы должны запустить:

brew info openblas | grep PKG_CONFIG_PATH

Это даст вам команду, начинающуюся с export PKG_CONFIG_PATH=, что вы должны запустить.

Примечание

Начиная с SciPy 1.14.0, мы добавили поддержку библиотеки Accelerate для BLAS и LAPACK. Для этого требуется macOS 13.3 или новее. Чтобы собрать с Accelerate вместо OpenBLAS, см. Выбор библиотек BLAS и LAPACK.

Для сборки SciPy необходим совместимый набор компиляторов C, C++ и Fortran. Это сложнее на Windows, чем на других платформах, потому что MSVC не поддерживает Fortran, а gfortran и MSVC нельзя использовать вместе. Вам потребуется один из этих наборов компиляторов:

  1. Компиляторы Mingw-w64 (gcc, g++, gfortran) - рекомендуется, потому что это проще всего установить и используется для CI и бинарных сборок SciPy

  2. MSVC + Intel Fortran (ifort)

  3. Компиляторы Intel (icc, ifort)

По сравнению с macOS и Linux, сборка SciPy на Windows немного сложнее из-за необходимости настройки этих компиляторов. Невозможно просто вызвать однострочную команду в командной строке, как на других платформах.

Сначала установите Microsoft Visual Studio - версия 2019 Community Edition или любая более новая версия подойдет (см. сайт загрузки Visual Studio). Это необходимо даже при использовании компиляторов MinGW-w64 или Intel, чтобы обеспечить наличие Windows Universal C Runtime (другие компоненты Visual Studio не требуются при использовании Mingw-w64 и могут быть отключены, если нужно сэкономить место на диске).

Существует несколько источников бинарных файлов для MinGW-w64. Мы рекомендуем версии RTools, которые можно установить с помощью Chocolatey (см. инструкции по установке Chocolatey здесь):

choco install rtools -y --no-progress --force --version=4.0.0.20220206

В случае проблем мы рекомендуем использовать ту же версию, что и в Задачи CI SciPy GitHub Actions для Windows.

Установщик MSVC не добавляет компиляторы в системный путь, и место установки может меняться. Чтобы запросить место установки, MSVC поставляется с vswhere.exe утилита командной строки. И чтобы сделать компиляторы C/C++ доступными внутри используемой оболочки, вам нужно запустить .bat файл для правильной разрядности и архитектуры (например, для 64-битных процессоров Intel используйте vcvars64.bat).

Для подробного руководства см. Использование набора инструментов Microsoft C++ из командной строки.

Подобно MSVC, компиляторы Intel предназначены для использования со скриптом активации (Intel\oneAPI\setvars.bat), который вы запускаете в используемой оболочке. Это делает компиляторы доступными в пути. Подробные инструкции см. в Начните работу с Intel® oneAPI HPC Toolkit для Windows.

Примечание

Компиляторы должны быть в системном пути (т.е., PATH переменная окружения должна содержать каталог, в котором могут быть найдены исполняемые файлы компилятора, чтобы быть найденной, за исключением MSVC, который будет найден автоматически, если и только если на PATH. Вы можете использовать любую оболочку (например, Powershell, cmd или Git Bash) для запуска сборки. Чтобы проверить это, попробуйте вызвать компилятор Fortran в используемой вами оболочке (например, gfortran --version или ifort --version).

Предупреждение

При использовании окружения conda возможно, что создание окружения не сработает из-за устаревшего компилятора Fortran. Если это произойдет, удалите compilers запись из environment.yml и попробуйте снова. Компилятор Fortran должен быть установлен, как описано в этом разделе.

Сборка SciPy из исходного кода#

Если вы хотите установить SciPy из исходников только один раз и не заниматься разработкой, то рекомендуемый способ сборки и установки — использовать pip. В противном случае рекомендуется conda.

Примечание

Если у вас ещё нет установки conda, мы рекомендуем использовать Miniforge; хотя подойдет любая версия conda.

Сборка из исходного кода для использования SciPy#

Если вы используете окружение conda, pip остаётся инструментом, который вы используете для запуска сборки SciPy из исходного кода. Важно всегда использовать --no-build-isolation флаг в pip install команда, чтобы избежать сборки против numpy wheel из PyPI. Чтобы это работало, вы должны сначала установить оставшиеся зависимости сборки в окружение conda:

# Either install all SciPy dev dependencies into a fresh conda environment
mamba env create -f environment.yml

# Or, install only the required build dependencies
mamba install python numpy cython pythran pybind11 compilers openblas meson-python pkg-config

# To build the latest stable release:
pip install scipy --no-build-isolation --no-binary scipy

# To build a development version, you need a local clone of the SciPy git repository:
git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init
pip install . --no-build-isolation
# To build the latest stable release:
pip install scipy --no-binary scipy

# To build a development version, you need a local clone of the SciPy git repository:
git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init
pip install .

Сборка из исходников для разработки SciPy#

Если вы хотите собрать из исходников, чтобы работать над самим SciPy, сначала клонируйте репозиторий SciPy:

git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init

Затем вам нужно сделать следующее:

  1. Создайте выделенную среду разработки (виртуальное окружение или conda-окружение),

  2. Установите все необходимые зависимости (build, а также тест, doc и необязательный зависимости),

  3. Сборка SciPy с нашим dev.py интерфейс разработчика.

Шаг (3) всегда одинаков, шаги (1) и (2) различаются между conda и виртуальными окружениями:

Чтобы создать scipy-dev среду разработки со всеми необходимыми и необязательными зависимостями, запустите:

mamba env create -f environment.yml
mamba activate scipy-dev

Примечание

Существует множество инструментов для управления виртуальными окружениями, таких как venv, virtualenv/virtualenvwrapper, pyenv/pyenv-virtualenv, Poetry, PDM, Hatch и другие. Здесь мы используем базовый venv инструмента, который является частью стандартной библиотеки Python. Вы можете использовать любой другой инструмент; всё, что нам нужно — это активированная среда Python.

Создать и активировать виртуальное окружение в новой директории с именем venv ( обратите внимание, что точная команда активации может отличаться в зависимости от вашей ОС и оболочки — см. “Как работают виртуальные окружения” в venv документация).

python -m venv venv
source venv/bin/activate
python -m venv venv
source venv/bin/activate
python -m venv venv
venv\Scripts\Activate.ps1

Затем установите зависимости на уровне Python (см. pyproject.toml) из PyPI с помощью:

# All dependencies
python -m pip install -r requirements/all.txt

# Alternatively, you can install just the dependencies for certain
# development tasks:

# Build and dev dependencies (for `python dev.py {build, lint, mypy}`)
python -m pip install -r requirements/build.txt -r requirements/dev.txt

# Doc dependencies (for `python dev.py {doc, refguide-check}`)
python -m pip install -r requirements/doc.txt

# Test dependencies (for `python dev.py {test, bench, refguide-check}`)
python -m pip install -r requirements/test.txt

Для сборки SciPy в активированной среде разработки выполните:

python dev.py build

Это установит SciPy внутри репозитория (по умолчанию в build-install каталог). Затем вы можете запустить тесты (python dev.py test), перейти в IPython (python dev.py ipython), или выполнить другие шаги разработки, такие как сборка HTML-документации или запуск бенчмарков. dev.py интерфейс самодокументируемый, поэтому, пожалуйста, смотрите python dev.py --help и python dev.py --help для подробного руководства.

Поддержка IDE и редактируемые установки

Хотя dev.py интерфейс — наш рекомендуемый способ работы с SciPy, у него есть одно ограничение: из-за пользовательского места установки, SciPy, установленный с использованием dev.py не будут распознаны автоматически в IDE (например, для запуска скрипта через кнопку «run» или установки точек останова визуально). Это будет лучше работать с сборка на месте (или «редактируемая установка»).

Поддерживаются редактируемые установки. Важно понимать, что вы можете использовать либо редактируемую установку, либо dev.py в клоне репозитория, но не оба одновременно. Если вы используете редактируемые установки, вам нужно использовать pytest и другие инструменты разработки напрямую вместо использования dev.py.

Чтобы использовать редактируемую установку, убедитесь, что вы начинаете с чистого репозитория (выполните git clean -xdf если вы собрали с dev.py ранее) и все зависимости настроены правильно, как описано выше на этой странице. Затем выполните:

# Note: the --no-build-isolation is important! meson-python will
# auto-rebuild each time SciPy is imported by the Python interpreter.
pip install -e . --no-build-isolation

# To run the tests for, e.g., the `scipy.linalg` module:
pytest scipy/linalg

При внесении изменений в код SciPy, включая скомпилированный код, нет необходимости вручную пересобирать или переустанавливать. При запуске git clean -xdf, который удаляет встроенные модули расширения, не забудьте также удалить SciPy с помощью pip uninstall scipy.

См. meson-python документация по редактируемым установкам для получения более подробной информации о том, как всё работает под капотом.

Установка статических заглушек типов#

Если вы хотите установить статические заглушки типов для помощи в разработке SciPy, вы можете включить scipy-stubs пакет в вашей среде разработки. Доступен на PyPI и conda-forge - см. scipy-stubs руководство по установке.

Настройка сборок#

Основная информация#