向pip提供NumPy site.cfg参数

jos*_*ers 31 python numpy pip intel-mkl

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

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

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

或者,是否可以设置任何环境变量而不是在site.cfg文件中提供库路径?这是我使用的site.cfg文件.它几乎逐字逐句地从英特尔网站上获取.

[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 =
Run Code Online (Sandbox Code Playgroud)

作为参考,我正在运行Ubuntu,Python 2.7和NumPy 1.6.

mjk*_*mjk 29

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

为了协助像easy_install这样的自动安装,还将检查用户的主目录中的文件〜/ .numpy-site.cfg.

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

  • 是的,这肯定有用.谢谢.我会稍微开放一段时间,看看是否有人想出一个更简单的解决方案. (2认同)

jos*_*ers 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()
Run Code Online (Sandbox Code Playgroud)


Jer*_*101 5

自从Intel 创建了 pips以来,安装 NumPy 以使用 Intel 的数学核心函数库的目标现在变得容易多了来安装 MKL + NumPy,

\n\n
pip uninstall numpy -y  # if the standard numpy is present\npip install intel-numpy\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

笔记:

\n\n
\n

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

\n
\n