NumPy用户指南 > 从源头建造
这里给出了从源代码构建NumPy的概述,并单独给出了针对特定平台的详细说明。
Building NumPy需要安装以下软件:
Python 3.5.x或更高版本
请注意,还需要安装Python开发标头,例如,在Debian / Ubuntu上,需要同时安装python3和 python3-dev。在Windows和macOS上,这通常不是问题。
编译器
要为Python构建任何扩展模块,您需要一个C编译器。各种NumPy模块都使用FORTRAN 77库,因此您还需要安装FORTRAN 77编译器。
请注意,NumPy主要是使用GNU编译器开发的。来自其他供应商的编译器,例如英特尔,Absoft,Sun,NAG,Compaq,Vast,Portland,Lahey,HP,IBM,Microsoft,仅以社区反馈的形式受支持,并且可能无法立即使用。建议使用GCC 4.x(及更高版本)编译器。
线性代数库
NumPy不需要安装任何外部线性代数库。但是,如果可用,则NumPy的安装脚本可以检测到它们并将其用于构建。可以使用许多不同的LAPACK库设置,包括优化的LAPACK库,例如OpenBLAS或MKL。
赛顿
要构建NumPy,您需要最新版本的Cython。
要安装NumPy,请运行:
pip install .
要执行可以从源文件夹运行的就地构建,请运行:
python setup.py build_ext --inplace
注意:有关在NumPy本身上进行开发工作的构建说明,请参阅“ 设置和使用开发环境”。
确保测试您的构建。为确保一切正常,请查看所有测试是否通过:
$ python runtests.py -v -m full
有关测试的详细信息,请参阅测试版本。
可以使用以下方式进行并行构建:
python setup.py build -j 4 install --prefix $HOME/.local
这将在4个CPU上编译numpy并将其安装到指定的前缀中。要执行并行就地构建,请运行:
python setup.py build_ext --inplace -j 4
也可以通过环境变量指定构建作业的数量
NPY_NUM_BUILD_JOBS
。
编译器是自动检测的;使用特定的编译器进行构建可以通过--fcompiler
。例如选择gfortran:
python setup.py build --fcompiler=gnu95
有关更多信息,请参见:
python setup.py build --help-fcompiler
检查用于构建库的编译器的一种相对简单可靠的方法是在库上使用ldd。如果libg2c.so是依赖项,则意味着已使用g77(注意:构建NumPy不再支持g77)。如果libgfortran.so是依赖项,则已使用gfortran。如果两者都是依赖关系,则意味着两者都已被使用,这几乎总是一个非常糟糕的主意。
NumPy搜索优化的线性代数库,例如BLAS和LAPACK。如下所述,搜索这些库有特定的顺序。
库的默认顺序为:
MKL
布利斯
OpenBLAS
阿特拉斯
加速(MacOS)
BLAS(NetLIB)
如果您希望针对OpenBLAS进行构建,但又可以使用BLIS,则可以通过环境变量预先定义搜索顺序,该环境变量
NPY_BLAS_ORDER
是上述名称的逗号分隔列表,用于确定搜索内容,例如:
NPY_BLAS_ORDER=ATLAS,blis,openblas,MKL python setup.py build
宁愿使用ATLAS,然后使用BLIS,然后使用OpenBLAS,最后使用MKL。如果这两个都不存在,则构建将失败(将名称进行小写比较)。
库的默认顺序为:
MKL
OpenBLAS
libFLAME
阿特拉斯
加速(MacOS)
拉帕克(NetLIB)
如果您希望针对OpenBLAS进行构建,但同时也可以使用MKL,则可以通过环境变量预先定义搜索顺序,该环境变量
NPY_LAPACK_ORDER
是上述名称的逗号分隔列表,例如:
NPY_LAPACK_ORDER=ATLAS,openblas,MKL python setup.py build
宁愿先使用ATLAS,再使用OpenBLAS,最后选择使用MKL。如果这两个都不存在,则构建将失败(将名称进行小写比较)。
可通过以下方式禁用NumPy中ATLAS和其他加速库的使用:
NPY_BLAS_ORDER= NPY_LAPACK_ORDER= python setup.py build
要么:
BLAS=None LAPACK=None ATLAS=None python setup.py build
您可以通过设置环境变量来告诉Numpy使用64位BLAS / LAPACK库:
NPY_USE_BLAS_ILP64=1
在构建Numpy时。支持以下64位BLAS / LAPACK库:
带有64_
符号后缀(openblas64_
)的OpenBLAS ILP64
不带符号后缀(openblas_ilp64
)的OpenBLAS ILP64
首选它们的顺序由NPY_BLAS_ILP64_ORDER
和NPY_LAPACK_ILP64_ORDER
环境变量确定
。默认值为openblas64_,openblas_ilp64
。
注意
在还使用32位BLAS / LAPACK的程序中使用无符号后缀的64位BLAS / LAPACK可能会在某些情况下导致崩溃(例如,在Linux上使用嵌入式Python解释器)。
带有64_
符号后缀的64位OpenBLAS 是通过编译具有以下设置的OpenBLAS获得的:
make INTERFACE64=1 SYMBOLSUFFIX=64_
符号后缀避免了32位和64位BLAS / LAPACK库之间的符号名称冲突。
可以通过设置OPT
,
FOPT
(对于Fortran)和CC
环境变量来提供其他编译器标志。当提供应该改善代码性能的选项时,请确保还进行了设置,-DNDEBUG
以使调试代码不被执行。