Подтвердить что ты не робот

Поставка аргументов numpy site.cfg в pip

Я использую NumPy, встроенный в библиотеку Intel Math Kernel. Я использую virtualenv и обычно использую pip для установки пакетов.

Однако для того, чтобы NumPy обнаружил библиотеки MKL, необходимо создать файл site.cfg в исходном каталоге NumPy до его компиляции, а затем вручную создать и установить. Я мог script весь этот процесс, но я надеялся на более простое решение.

У меня есть стандартный файл site.cfg, который можно использовать для этой цели под управлением версии. Есть ли какие-либо параметры командной строки в пипе, которые будут сообщать ему, чтобы скопировать конкретный файл в исходный каталог перед созданием пакета?

В качестве альтернативы существуют ли какие-либо переменные среды, которые могут быть заданы вместо предоставления путей библиотеки в файле site.cfg? Вот файл site.cfg, который я использую. Это было взято почти дословно из сайта Intel.

[mkl]
library_dirs = /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64
include_dirs = /opt/intel/composer_xe_2013.1.117/mkl/include
mkl_libs = mkl_rt
lapack_libs =

Для справки, я запускаю Ubuntu, Python 2.7 и NumPy 1.6.

4b9b3361

Ответ 1

Из источника (https://github.com/numpy/numpy/blob/master/site.cfg.example):

Чтобы помочь автоматической установке, например easy_install, домашний каталог пользователя также будет проверен для файла ~/.numpy-site.cfg.

Это приемлемое решение? Вам все равно нужно предварительно загрузить домашние каталоги с помощью глобального.numpy-site.cfg, но после этого вам не придется гадать со сборкой или установкой.

Ответ 2

Я закончил создание script, чтобы автоматизировать это. Вот оно, если это может помочь кому-то другому. Я тестировал его в Python 2.7, но он должен работать в другом месте без существенных изменений.

from __future__ import unicode_literals

import io
import os.path
import re
import subprocess
import urllib2

# This downloads, builds, and installs NumPy against the MKL in the
# currently active virtualenv

file_name = 'numpy-1.6.2.tar.gz'
url = ('http://sourceforge.net/projects/numpy/files/NumPy/1.6.2/'
       'numpy-1.6.2.tar.gz/download')

def main():

    # download NumPy and unpack it
    file_data = urllib2.urlopen(url).read()
    with io.open(file_name, 'wb') as fobj:
        fobj.write(file_data)
    subprocess.check_call('tar -xvf {0}'.format(file_name), shell=True)
    base_name = re.search(r'(.*)\.tar\.gz$', file_name).group(1)
    os.chdir(base_name)

    # write out a site.cfg file in the build directory
    site_cfg = (
        '[mkl]\n'
        'library_dirs = /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64\n'
        'include_dirs = /opt/intel/composer_xe_2013.1.117/mkl/include\n'
        'mkl_libs = mkl_rt\n'
        'lapack_libs =\n')
    with io.open('site.cfg', 'wt', encoding='UTF-8') as fobj:
        fobj.write(site_cfg)

    # build and install NumPy
    subprocess.check_call('python setup.py build', shell=True)
    subprocess.check_call('python setup.py install', shell=True)


if __name__ == '__main__':
    main()

Ответ 3

Ваша цель установки NumPy для использования библиотеки Intel Math Kernel теперь намного проще, поскольку Intel создала пипсы для установки MKL + NumPy:

pip uninstall numpy -y  # if the standard numpy is present
pip install intel-numpy

а также intel-scipy, intel-scikit-learn, pydaal, tbb4py, mkl_fft, mkl_random и пакеты нижнего уровня, если вам нужны только они. Опять же, вы должны сначала удалить стандартные пакеты, если они уже установлены в вашем virtualenv.

Примечание:

Если стандартные пакеты NumPy, SciPy и Scikit-Learn уже установлены, пакеты должны быть удалены перед установкой вариантов этих пакетов Intel® (intel-numpy и т.д.), Чтобы избежать конфликтов. Как упоминалось ранее, pydaal использует intel-numpy, поэтому важно сначала удалить стандартную библиотеку Numpy (если она установлена), а затем установить pydaal.

Ответ 4

На ваш вопрос о том, как настроить NumPy (например, использовать OpenBLAS):

  1. Скачать https://github.com/numpy/numpy/blob/master/site.cfg.example
  2. Отредактируйте соответствующие строки, например,
[openblas]
libraries = openblas
library_dirs = /opt/OpenBLAS/lib
include_dirs = /opt/OpenBLAS/include
  1. Сохранить как ~/.numpy-site.cfg
  2. Установите numpy из исходного кода, не загружая его вручную (--force-reinstall позволит заменить существующий пакет):

    pip install numpy --no-binary numpy --force-reinstall

  3. Бонус: Тот же файл ~/.numpy-site.cfg работает для установки scipy на OpenBLAS:

    pip install scipy --no-binary scipy

    или установите их вместе:

    pip install numpy scipy --no-binary numpy,scipy --force-reinstall

2019: Если вы все еще используете Python 2.7, установите numpy, а затем установите scipy. Попытка установить их вместе:

  • вызовите установщик SciPy easy_install, который запрашивает NumPy,
  • загрузите последнюю версию установщика NumPy (даже если вы специально спросили pip на install numpy==1.14.6 scipy==1.0.1 --no-binary numpy,scipy), затем
  • ошибка с RuntimeError: Python version >= 3.5 required, потому что последний NumPy не поддерживает Python 2.7.