Связать numpy с PyPI mkl

#python-3.x #numpy #linker #distutils

Вопрос:

Поэтому я хотел бы создать numpy против MKL BLAS в Ubuntu 20.04.

У меня нет проблем с созданием и связыванием с установленным в системе mkl (например intel-mkl , из пакета Ubuntu). Как описано в документе, site.cfg.example я создал копию site.cfg рядом с ним и заполнил соответствующую информацию

 [mkl]
library_dirs = /path/to/my/local/mkl/lib
include_dirs = /path/to/my/local/mkl/include
libraries = mkl_rt
 

Я могу создать колесо python -m build --wheel , связанное с этим MKL , я могу установить его нормально pip install my_numpy.whl и после import numpy , numpy.show_config() показывает ожидаемую информацию о mkl.

Теперь то, что я хотел бы сделать, — это быть независимым от

  • установленная система mkl
  • абсолютные пути в library_dirs и include_dirs

Вся необходимая библиотека и включающие файлы для построения и связывания с MKL доступны в пакетах PyPI mkl и mkl-include. Я хотел бы настроить процесс сборки, в котором эти два пакета загружаются, создаются и сопоставляются, а также добавляются в требования. Теперь я понимаю, что запуск python3 -m build создает отдельный venv и предварительно устанавливает все пакеты, перечисленные в pyproject.toml . Здесь моя отредактированная версия с mkl и mkl-include добавлена внизу

 [build-system]
# Minimum requirements for the build system to execute.
requires = [
    "packaging==20.5; platform_machine=='arm64'",  # macos M1
    "setuptools<49.2.0",
    "wheel==0.36.2",
    "Cython>=0.29.24,<3.0",  # Note: keep in sync with tools/cythonize.py
    "mkl-include<2021.2",
    "mkl<2021.2"
]
 

Я застрял на том, что нужно поместить в site.cfg раздел library_dirs и include_dirs использовать файлы из пакетов, установленных сборкой venv. Есть ли способ включить префикс текущего venv в эти пути? Если да, то как? Есть ли numpy.distutils что — нибудь в этом отношении в предложении?

Или мне нужно подойти к этой проблеме по-другому? Например, есть ли способ построить numpy и создать. whl, но без явной привязки, т. е. привязка может быть отложена до фактического времени установки встроенного колеса, где найдены фактические библиотеки времени выполнения MKL (в данном случае /path/to/my/current/venv/lib ) и связаны с ними? Возможно ли это вообще с помощью колеса?

Спасибо за вашу помощь!