Составление из исходного кода
Здесь приводится общий обзор процесса сборки NumPy из исходного кода, а подробные инструкции для конкретных платформ даны отдельно.
Предварительные требования
Для сборки NumPy требуется установка следующего программного обеспечения:
-
Python 3.6.x или более поздней версии
Обратите внимание, что также необходимо установить заголовки для разработки Python, например, в Debian/Ubuntu необходимо установить как
python3, так иpython3-dev. В Windows и macOS это обычно не вызывает проблем. -
Компиляторы
Для компиляции любых модулей расширения для Python вам потребуется компилятор C. Различные модули NumPy используют библиотеки FORTRAN 77, поэтому вам также потребуется установленный компилятор FORTRAN 77.
Обратите внимание, что NumPy разрабатывается в основном с использованием компиляторов GNU и протестирован с компиляторами MSVC и Clang. Компиляторы других поставщиков, такие как Intel, Absoft, Sun, NAG, Compaq, Vast, Portland, Lahey, HP, IBM, поддерживаются только в форме отзывов сообщества и могут не работать из коробки. Рекомендуются компиляторы GCC 4.x (и более поздние версии). Для ARM64 (aarch64) рекомендуются компиляторы GCC 8.x (и более поздние версии).
-
Библиотеки линейной алгебры
NumPy не требует установки каких-либо внешних библиотек линейной алгебры. Однако, если они доступны, скрипт установки NumPy может их обнаружить и использовать для сборки. Можно использовать множество различных настроек библиотек LAPACK, включая оптимизированные библиотеки LAPACK, такие как OpenBLAS или MKL. Выбор и расположение этих библиотек, а также пути включения и другие параметры сборки могут быть указаны в файле
site.cfg, расположенном в корневом репозитории NumPy, или в файле.numpy-site.cfgв вашем домашнем каталоге. См. пример файлаsite.cfg.example, включённого в репозиторий NumPy или sdist, для документации, а также ниже для указания приоритета поиска из переменных окружения. -
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. Есть определённый порядок поиска этих библиотек, как описано ниже и в файле site.cfg.example.
BLAS
Стандартный порядок для библиотек:
- MKL
- BLIS
- OpenBLAS
- ATLAS
- BLAS (NetLIB)
Если вы хотите скомпилировать против OpenBLAS, но у вас также есть BLIS, вы можете предварительно определить порядок поиска с помощью переменной окружения NPY_BLAS_ORDER, которая представляет собой список имён, разделённых запятыми, используемый для определения того, что искать. Например:
NPY_BLAS_ORDER=ATLAS,blis,openblas,MKL python setup.py build
будет отдавать предпочтение ATLAS, затем BLIS, затем OpenBLAS и в крайнем случае MKL. Если ни одна из этих библиотек не существует, сборка завершится ошибкой (имена сравниваются в нижнем регистре).
В качестве альтернативы можно использовать ! или ^ для отмены всех элементов:
NPY_BLAS_ORDER='^blas,atlas' python setup.py build
позволит использовать всё, кроме библиотек NetLIB BLAS и ATLAS, порядок вышеуказанного списка сохраняется.
Смешивание отрицаний и положительных значений, а также наличие нескольких отрицаний, приведёт к ошибке.
LAPACK
Стандартный порядок для библиотек:
- MKL
- OpenBLAS
- libFLAME
- ATLAS
- LAPACK (NetLIB)
Если вы хотите скомпилировать против OpenBLAS, но у вас также есть MKL, вы можете предварительно определить порядок поиска с помощью переменной окружения NPY_LAPACK_ORDER, которая представляет собой список имён, разделённых запятыми. Например:
NPY_LAPACK_ORDER=ATLAS,openblas,MKL python setup.py build
будет отдавать предпочтение ATLAS, затем OpenBLAS и в крайнем случае MKL. Если ни одна из этих библиотек не существует, сборка завершится ошибкой (имена сравниваются в нижнем регистре).
В качестве альтернативы можно использовать ! или ^ для отмены всех элементов:
NPY_LAPACK_ORDER='^lapack' python setup.py build
позволит использовать всё, кроме библиотеки NetLIB LAPACK, порядок вышеуказанного списка сохраняется.
Deprecated since version 1.20: Нативные библиотеки на macOS, предоставляемые Accelerate, непригодны для использования в NumPy, так как содержат ошибки, которые приводят к неправильному выводу при легко воспроизводимых условиях. Если поставщик исправит эти ошибки, библиотека может быть восстановлена, но до тех пор пользователи, выполняющие компиляцию для себя, должны использовать другую библиотеку линейной алгебры или использовать встроенную (но более медленную) стандартную, см. следующий раздел.
Отключение 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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/user/building.html