Компиляция из исходного кода
Здесь представлен общий обзор компиляции NumPy из исходного кода, а подробные инструкции для конкретных платформ приведены отдельно.
Предварительные требования
Для компиляции NumPy необходимо установить следующее программное обеспечение:
-
Python 3.5.x или более поздняя версия
Обратите внимание, что также необходимо установить заголовки разработки Python, например, в Debian/Ubuntu необходимо установить как
python3, так иpython3-dev. В Windows и macOS это обычно не требуется. -
Компиляторы
Для компиляции модулей расширений для Python вам потребуется C-компилятор. Различные модули NumPy используют библиотеки FORTRAN 77, поэтому вам также потребуется установленный FORTRAN 77-компилятор.
Обратите внимание, что NumPy разработан в основном с использованием GNU-компиляторов. Компиляторы других поставщиков, таких как Intel, Absoft, Sun, NAG, Compaq, Vast, Portland, Lahey, HP, IBM, Microsoft, поддерживаются только в виде обратной связи сообщества и могут не работать сразу из коробки. Рекомендуются компиляторы GCC 4.x (и более поздние).
-
Библиотеки линейной алгебры
NumPy не требует установки каких-либо внешних библиотек линейной алгебры. Однако, если они доступны, скрипт настройки NumPy может их обнаружить и использовать при компиляции. Можно использовать ряд различных настроек библиотек LAPACK, включая оптимизированные библиотеки LAPACK, такие как OpenBLAS или MKL.
-
Cython
Для компиляции NumPy вам потребуется недавняя версия Cython.
Базовая установка
Для установки NumPy выполните:
pip install .
Для выполнения компиляции на месте, которую можно запускать из папки с исходным кодом, выполните:
python setup.py build_ext --inplace
Примечание: инструкции по компиляции для работы над самим NumPy см. в Настройка и использование среды разработки.
Тестирование
Не забудьте проверить свои сборки. Чтобы убедиться, что все работает правильно, проверьте, пройдут ли все тесты:
$ python runtests.py -v -m full
Подробная информация о тестировании приведена в Тестирование сборок.
Параллельная компиляция
Возможно выполнение параллельной компиляции с помощью:
python setup.py build -j 4 install --prefix $HOME/.local
Это позволит скомпилировать numpy на 4 процессорах и установить его в указанный префикс. Для выполнения параллельной компиляции на месте выполните:
python setup.py build_ext --inplace -j 4
Количество задач компиляции также можно указать через переменную окружения NPY_NUM_BUILD_JOBS.
Выбор компилятора Fortran
Компиляторы определяются автоматически; компиляция с использованием определенного компилятора может быть выполнена с помощью --fcompiler. Например, для выбора gfortran:
python setup.py build --fcompiler=gnu95
Дополнительная информация представлена в:
python setup.py build --help-fcompiler
Как проверить ABI библиотек BLAS/LAPACK
Один из относительно простых и надежных способов проверки компилятора, используемого для сборки библиотеки, — использование ldd для библиотеки. Если libg2c.so является зависимостью, это означает, что использовался g77 (примечание: g77 больше не поддерживается для сборки NumPy). Если libgfortran.so является зависимостью, использовался gfortran. Если обе являются зависимостями, это означает, что использовались оба, что почти всегда является очень плохой идеей.
Ускоренные библиотеки BLAS/LAPACK
NumPy ищет оптимизированные библиотеки линейной алгебры, такие как BLAS и LAPACK. Порядок поиска этих библиотек описан ниже.
BLAS
Стандартный порядок поиска библиотек:
- MKL
- BLIS
- OpenBLAS
- ATLAS
- Accelerate (MacOS)
- BLAS (NetLIB)
Если вы хотите скомпилировать с OpenBLAS, но у вас также доступен BLIS, можно предварительно задать порядок поиска через переменную окружения NPY_BLAS_ORDER, которая представляет собой список имен, разделенных запятыми, используемый для определения того, что искать. Например:
NPY_BLAS_ORDER=ATLAS,blis,openblas,MKL python setup.py build
будет отдавать предпочтение ATLAS, затем BLIS, затем OpenBLAS и в последнюю очередь MKL. Если ни одна из этих библиотек не найдена, сборка завершится ошибкой (имена сравниваются в нижнем регистре).
LAPACK
Стандартный порядок поиска библиотек:
- MKL
- OpenBLAS
- libFLAME
- ATLAS
- Accelerate (MacOS)
- LAPACK (NetLIB)
Если вы хотите скомпилировать с OpenBLAS, но у вас также доступен MKL, можно предварительно задать порядок поиска через переменную окружения NPY_LAPACK_ORDER, которая представляет собой список имен, разделенных запятыми. Например:
NPY_LAPACK_ORDER=ATLAS,openblas,MKL python setup.py build
будет отдавать предпочтение ATLAS, затем OpenBLAS и в последнюю очередь MKL. Если ни одна из этих библиотек не найдена, сборка завершится ошибкой (имена сравниваются в нижнем регистре).
Отключение ATLAS и других ускоренных библиотек
Использование ATLAS и других ускоренных библиотек в NumPy можно отключить с помощью:
NPY_BLAS_ORDER= NPY_LAPACK_ORDER= python setup.py build
или:
BLAS=None LAPACK=None ATLAS=None python setup.py build
64-битные BLAS и LAPACK
Вы можете указать Numpy использовать 64-битные библиотеки BLAS/LAPACK, установив переменную окружения:
NPY_USE_BLAS_ILP64=1
при сборке Numpy. Поддерживаются следующие 64-битные библиотеки BLAS/LAPACK:
- OpenBLAS ILP64 с суффиксом символа
64_(openblas64_) - OpenBLAS ILP64 без суффикса символа (
openblas_ilp64)
Порядок их предпочтения определяется переменными окружения NPY_BLAS_ILP64_ORDER и NPY_LAPACK_ILP64_ORDER. Значение по умолчанию — openblas64_,openblas_ilp64.
Примечание
Использование 64-битных BLAS/LAPACK без суффикса символа в программе, которая также использует 32-битные BLAS/LAPACK, может привести к сбоям в определенных условиях (например, с встроенными интерпретаторами Python на Linux).
64-битный OpenBLAS с суффиксом символа 64_ получается путем компиляции OpenBLAS с настройками:
make INTERFACE64=1 SYMBOLSUFFIX=64_
Суффикс символа предотвращает конфликты имен символов между 32-битными и 64-битными библиотеками BLAS/LAPACK.
Предоставление дополнительных флагов компилятора
Дополнительные флаги компилятора можно предоставить, установив переменные окружения OPT, FOPT (для Fortran) и CC. При предоставлении опций, которые должны улучшить производительность кода, убедитесь, что вы также установили -DNDEBUG, чтобы код отладки не выполнялся.
© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/user/building.html