我使用针对英特尔数学核心库构建的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。
答案 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-scipy
,intel-scikit-learn
,pydaal
,tbb4py
,mkl_fft
,mkl_random
和较低级别的软件包(如果需要)只是他们。同样,如果标准软件包已安装在virtualenv中,则必须首先将其卸载。
注意:
如果已经安装了标准的NumPy,SciPy和Scikit-Learn软件包,则在安装这些软件包的Intel®变体(intel-numpy等)之前,必须先卸载这些软件包,以避免发生任何冲突。如前所述,pydaal使用intel-numpy,因此重要的是首先删除标准的Numpy库(如果已安装),然后再安装pydaal。
答案 3 :(得分:0)
关于如何配置NumPy(例如使用OpenBLAS)的问题:
[openblas]
libraries = openblas
library_dirs = /opt/OpenBLAS/lib
include_dirs = /opt/OpenBLAS/include
~/.numpy-site.cfg
从源代码安装numpy而不手动下载它(--force-reinstall
将使其替换现有软件包):
pip install numpy --no-binary numpy --force-reinstall
奖金::同一文件~/.numpy-site.cfg
用于在OpenBLAS上安装scipy:
pip install scipy --no-binary scipy
或将它们安装在一起:
pip install numpy scipy --no-binary numpy,scipy --force-reinstall