Cómo compilar el código fuente de paquetes NumPy que dependen de las bibliotecas LAPACK y ATLAS
1.Requisitos de la versión GCC
Utilice una versión más reciente del conjunto de herramientas GCC con el compilador gfortran integrado (use la versión 4.7 si es posible).
Nota 1: El "GCC" en mayúscula aquí se refiere al conjunto de compiladores GNU, que no solo incluye el compilador de C gcc, sino que también incluye muchos otros compiladores de lenguajes (como g/gfortran, etc.). g /gfortran, etc.)
Nota 2: La versión 3.x del compilador de C gcc puede causar errores al compilar la biblioteca del atlas debido a que faltan archivos de encabezado
Nota 3: Si el conjunto de herramientas GCC no tiene el compilador gfortran, encontrará algunos errores inexplicables al compilar la biblioteca lapack (porque lapack está escrito en fortran, afortunadamente, el compilador gfortran se ha integrado en GCC 4.7 y superior). Si la versión GCC es compatible, agréguela temporalmente a la variable de entorno PATH y establezca la ruta de búsqueda de la biblioteca dinámica:
[simple] Ver copia normal
Ver CÓDIGO El fragmento de código derivado de mi fragmento de código
$ export PATH=/home/slvher/tools/gcc48 /bin/:$PATH?
$ export LD_LIBRARY_PATH=/home/slvher /tools/gcc48/lib64 :/home/slvher/tools/gcc48/lib?
Nota 4: Configurar temporalmente LD_LIBRARY_PATH en la sesión de shell actual puede garantizar que la biblioteca GCC se busque correctamente durante el proceso de compilación, pero al final es Es mejor no configurarlo en .bash_profile, porque esto afectará la ruta encontrada en otros programas y puede causar problemas.
Nota 5: Si no hay errores en los requisitos de la versión de GCC y la configuración de las variables de entorno mencionados aquí, la compilación posterior será más fluida; de lo contrario, encontrará varios problemas de compilación/vinculación. Instrucciones, registraremos las trampas en estos procesos y analizaremos las ideas para encontrar estos extraños problemas, por lo que no entraré en detalles aquí.
2. Compilar las bibliotecas LAPACK y ATLAS
lapack es una biblioteca de álgebra lineal especialmente optimizada desarrollada en fortran; también es una biblioteca de álgebra lineal optimizada, que proporciona todas las características de BLAS; API de biblioteca (incluidas la interfaz C y la interfaz Fortran) e implementa algunas funciones en la biblioteca lapack. También implementa algunas funciones de la biblioteca lapack. Durante el proceso de compilación, Atlas ajusta los parámetros de las funciones informáticas científicas en función de los parámetros de configuración de la máquina para obtener un mejor rendimiento informático en esa máquina.
A primera vista, parece que es necesario compilar las bibliotecas lapack y atlas por separado. Afortunadamente, la biblioteca atlas admite la compilación automática de la biblioteca lapack en el momento de la compilación, por lo que solo necesita configurar correctamente la compilación de la biblioteca atlas y compilar la biblioteca atlas.
Los pasos principales para compilar la biblioteca atlas/lapack son los siguientes.
1) Descargue el paquete de código fuente lapack y el paquete de código fuente atlas del sitio web oficial respectivamente. Descargué las últimas versiones de lapack-3.5.0.tgz y atlas3.10.2.tar.bz2
2) Descomprima el paquete de compresión del código fuente del atlas: tar -jxvf atlas3.10.2.tar bz2
3) cd ATLAS amp mkdir BLDdir amp; >
4) Ejecutar el comando configure para configurar los parámetros de compilación
[plain] Ver la copia normal
Ver el fragmento de código derivado de mi fragmento de código en CODE
$ ./configure --shared -b 64 --prefix=/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs --with-netlib-lapack-tarfile=/home /slvher/tools/ scikit-learn-virtualenv/dep-libs/lapack-3.5.0.tgz
Entre ellos, --shared significa compilar el archivo de herencia Atlas*** (configure insertará automáticamente "-fPIC en el parámetro del comando de compilación ", por lo que no es necesario especificarlo explícitamente aquí); --shared significa compilar archivos de herencia Atlas***. (Configure insertará automáticamente el parámetro "-fPIC" en el comando de compilación, por lo que no es necesario especificarlo aquí; --prefix especifica la ruta de instalación del resultado de la compilación; --with-netlib-lapack-tarfile significa que; al compilar la biblioteca atlas, se utilizará. Compile la biblioteca lapack con el mismo compilador y los parámetros de compilación/vinculación. Después de especificar la ruta al paquete de código fuente de lapack, configure descomprimirá automáticamente el código fuente de lapack y lo copiará en el directorio BLDdir/src/lapack/reference/.
5) Después de ejecutar la configuración, se generará un archivo Make.inc en el directorio BLDdir, que establecerá una serie de parámetros de compilación (por ejemplo, ruta de búsqueda, ruta de compilación, parámetros de compilación), búsqueda ruta, la ruta de salida de la compilación, compilador, parámetros pasados al compilador, etc.), y los Makefiles de muchos módulos en el subdirectorio BLDdir contienen este Make.inc, incluido el componente lapack que no tiene nada que ver con el código fuente. .
6) Después de ejecutar la configuración, se genera un archivo Make.inc en el directorio BLDdir, que establece muchos parámetros de compilación (como la ruta de búsqueda, la ruta de salida de la compilación, el compilador y la ruta pasada al compilador), parámetros, etc.), incluido el paquete lapack que no tiene nada que ver con el código fuente, se puede ver que este archivo Make.inc puede lograr el propósito de unificar el entorno de compilación.
6) realizar compilación
7) realizar verificación
8) realizar ptcheck
9) realizar instalación
Si la serie de comandos anterior se ejecuta correctamente, las bibliotecas compiladas *.a y *.so se instalarán en la ruta especificada por el parámetro --prefix y los archivos de encabezado de estas bibliotecas se copiarán en el directorio de inclusión en la ruta de instalación.
En este punto, se han compilado las bibliotecas ATLAS y LAPACK, donde la biblioteca LAPACK es una biblioteca estática y la biblioteca ATLAS es una biblioteca dinámica. De hecho, la biblioteca dinámica ATLAS ya contiene todos los símbolos y códigos de la biblioteca estática LAPACK.
Ahora puedes empezar a compilar paquetes NumPy que dependen de las bibliotecas LAPACK y ATLAS.
3. Compile el paquete NumPy optimizado
Prefabricado: descargue el paquete de código fuente NumPy del sitio web oficial y descomprímalo. Aquí tomamos la última versión numpy-1.9.2.tar. gz como ejemplo.
1) cd al directorio descomprimido numpy-1.9.2
2) cp site.cfg.example site.cfg
3) Configurar el sitio. entrada del atlas en cfg, donde include_dirs y biblioteca_dirs son las rutas al programa de instalación de la biblioteca del atlas, los directorios include y lib
[plain] Ver copia normal
Ver fragmentos de código derivados de lo que tener en CÓDIGO Fragmento de código en
[atlas] ?
atlas_libs? = lapack, f77blas, cblas, atlas ?
biblioteca_dirs = /home/slvher/tools /scikit -learn-virtualenv/dep-libs/sklearn-libs/lib ?
include_dirs = /home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/include ?
4) python setup.py config
5) python setup.py build --fcompiler=gnu95 ## Especifique el compilador Fortran como gfortran en el conjunto de herramientas GCC4.8
6) python setup.py install
Normalmente, después de una compilación exitosa, la instalación copiará el resultado de la compilación en el directorio lib/python2.7/site-packages en la ruta de instalación actual del intérprete de Python. .
En este punto, puede ver la configuración del paquete NumPy a través del siguiente ejemplo:
[python] ver copia simple
Ver el fragmento de código derivado de lo que tengo en CÓDIGO Fragmento de código en
gt;gt;gt;?import?numpy?as?np?
gt;gt;gt;?np.__config__.show ()?
p>
atlas_3_10_blas_threads_info:?
bibliotecas?['lapack',?f77blas',?cblas',?atlas']?
library_dirs?=?['/home /slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/lib']?
define_macros?=?[('HAVE_CBLAS', ?Ninguno),? ('ATLAS_INFO', ?'" ("3.10.2/"")]?
idioma?=?c?
include_dirs?=?[' /home/slvher/tools/scikit-learn -virtualenv/dep-libs/sklearn-libs/include']?
lapack_opt_info:?
bibliotecas?['tatlas',? lapack',?f77blas',?cblas' ,? atlas']?
library_dirs?=?['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/ lib']?
define_macros?=?[('ATLAS_INFO',?'" \\"3.10.2\\"")]?
idioma?=?f77?
include_dirs?= ?['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/include']?
blas_opt_info:? p>
¿bibliotecas?['lapack ',?f77blas',?cblas',?atlas']?
library_dirs?=?['/home/slvher/tools/scikit-learn-virtualenv /dep-libs/sklearn-libs/lib ']?
define_macros?=?[('HAVE_CBLAS',?Ninguno),? ('ATLAS_INFO',?'" ("3.10.2/" ")]?
idioma?=?c?
include_dirs?=?['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs /include']?
openblas_info:? ¿NO? ¿NO?
¿bibliotecas?[
¿bibliotecas?]
library_dirs?=? ['/home/slvher/
tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/lib']?
define_macros?=?[('ATLAS_INFO',?'" \\"3.10.2\\"" )]?
idioma?=?f77?
include_dirs?=?['/home/slvher/tools/scikit-learn-virtualenv/dep-libs/sklearn-libs/ include']?
lapack_mkl_info:? ¿NO? ¿NO? DISPONIBLE
O puedes verificar su funcionalidad con un ejemplo concreto:
[python] ?view?plain?copy
Ver el fragmento de código en CÓDIGO derivado de mi fragmento de código
gt;gt;gt;?import?numpy?as?np ?
gt;gt;gt;?np.arange(15).reshape(3,?5)?
array([[?0,?1,?2, ?3,?4 ],?
[?5,?6,?7,?8,?9],? ])?
gt;gt;gt;
gt;gt;gt;?a?=?np.arange(15).reshape(3, ?5)?
gt;gt;gt;?a?
array([[0,?1,?2,?3,?4],?
[ ?5,?6,?7,?8,?9],?
[10,?11,?12,?13,?14]])?
gt ;gt;gt;?type(a)?
lt;type?'numpy.ndarray'gt;?
gt;gt;gt;?
gt;gt;gt;?
gt;gt;gt;?from?numpy.linalg?import?*?
gt;gt;gt; ?b?=? np.array([[1.0,?2.0],? [3.0,?4.0]])?
gt;gt;gt;?b?
array([[? 1.,?2.],?
[?3.,?4.]])?
gt;gt;gt;?b.transpose ()? p>
array([[?1.,?3.],?
[?2.,?4.]])?
gt;gt;gt ;?inv(b)?
array([[-2.?,?1.?],?
[?1.5,?-0.5] ])? p>
gt;gt;gt;
array([[-2.?,?1.?],?
[? p>