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