向pip提供NumPy site.cfg参数

时间:2012-12-07 19:41:05

标签: python numpy pip intel-mkl

我使用针对英特尔数学核心库构建的NumPy。我使用virtualenv,通常使用pip来安装包。

但是,为了让NumPy找到MKL库,在编译之前在NumPy源目录中创建site.cfg文件是必要的,然后手动构建和安装。我可以编写整个过程的脚本,但我希望有一个更简单的解决方案。

我有一个标准的site.cfg文件,可以在版本控制下用于此目的。是否有任何pip命令行选项可以告诉它在构建包之前将特定文件复制到源目录?

或者,是否可以设置任何环境变量而不是在site.cfg文件中提供库路径?这是我使用的site.cfg文件。它几乎逐字逐句地从Intel's site开始。

[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。

4 个答案:

答案 0 :(得分:29)

来自来源(https://github.com/numpy/numpy/blob/master/site.cfg.example):

  

协助自动安装,例如easy_install,即用户的主目录   还将检查文件〜/ .numpy-site.cfg。

这是一个可行的解决方案吗?您仍然需要使用全局.numpy-site.cfg预加载主目录,但之后您不必使用构建或安装。

答案 1 :(得分:6)

我最终整理了一个脚本来实现自动化。在这里它是,以防它可以帮助别人。我已经在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()

答案 2 :(得分:1)

Intel created pips安装MKL + NumPy以来,您安装NumPy以使用英特尔数学内核库的目标现在要容易得多了。

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

以及intel-scipyintel-scikit-learnpydaaltbb4pymkl_fftmkl_random和较低级别的软件包(如果需要)只是他们。同样,如果标准软件包已安装在virtualenv中,则必须首先将其卸载。

注意:

  

如果已经安装了标准的NumPy,SciPy和Scikit-Learn软件包,则在安装这些软件包的Intel®变体(intel-numpy等)之前,必须先卸载这些软件包,以避免发生任何冲突。如前所述,pydaal使用intel-numpy,因此重要的是首先删除标准的Numpy库(如果已安装),然后再安装pydaal。

答案 3 :(得分:0)

关于如何配置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用于在OpenBLAS上安装scipy:

    pip install scipy --no-binary scipy

    或将它们安装在一起:

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