whl wheel mkl compiler python numpy pip intel-mkl

wheel - python intel compiler



Suministro de NumPy site.cfg argumentos para pip (2)

Estoy usando NumPy construido contra la biblioteca del núcleo de matemáticas de Intel. Yo uso virtualenv, y normalmente uso pip para instalar paquetes.

Sin embargo, para que NumPy encuentre las bibliotecas MKL, es necesario crear un archivo site.cfg en el directorio fuente de NumPy antes de compilarlo, luego compilarlo e instalarlo manualmente. Podría escribir todo este proceso, pero esperaba una solución más simple.

Tengo un archivo site.cfg estándar que se puede usar para este propósito en el control de versiones. ¿Existen opciones de línea de comandos de pip que le indiquen que copie un archivo en particular en el directorio de origen antes de construir un paquete?

Alternativamente, ¿existen variables de entorno que se puedan configurar en lugar de suministrar las rutas de la biblioteca en un archivo site.cfg? Aquí está el archivo site.cfg que uso. Fue tomada casi textualmente del sitio de 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 =

Para referencia, estoy ejecutando Ubuntu, Python 2.7 y NumPy 1.6.


Desde la fuente ( https://github.com/numpy/numpy/blob/master/site.cfg.example ):

Para ayudar a la instalación automática como easy_install, el directorio de inicio del usuario también se revisará para el archivo ~ / .numpy-site.cfg.

¿Es esa una solución viable? Aún necesitarías precargar los directorios de inicio con el .numpy-site.cfg global, pero no tendrías que deshacerte de la compilación o instalación después de eso.


Terminé armando un script para automatizar esto. Aquí está, en caso de que pueda ayudar a alguien más. Lo he probado en Python 2.7, pero debería funcionar en otro lugar sin modificaciones significativas.

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()