Building from source¶
这里给出了从源码构建NumPy的一般概述,单独给出具体平台的详细说明。
Prerequisites¶
构建NumPy需要安装以下软件:
Python 2.7.x,3.4.x或更新版本
在Debian和衍生品(Ubuntu):python,python-dev(或python3-dev)
在Windows上:www.python.org的官方python安装程序就足够了
确保在继续之前安装了Python包distutils。例如,在Debian GNU / Linux中,安装python-dev也会安装distutils。
Python也必须在启用zlib模块的情况下进行编译。这实际上总是与预包装的Pythons的情况。
编译器
要构建Python的任何扩展模块,你需要一个C编译器。各种NumPy模块使用FORTRAN 77库,因此您还需要安装一个FORTRAN 77编译器。
注意,NumPy主要使用GNU编译器开发。来自其他供应商(如Intel,Absoft,Sun,NAG,Compaq,Vast,Porland,Lahey,HP,IBM,Microsoft)的编译器仅以社区反馈的形式提供支持,并且可能无法开箱即用。建议使用GCC 4.x(及更高版本)编译器。
线性代数库
NumPy不需要安装任何外部线性代数库。但是,如果这些都可用,NumPy的安装脚本可以检测它们并使用它们进行构建。可以使用许多不同的LAPACK库设置,包括优化的LAPACK库,例如OS X上的ATLAS,MKL或Accelerate / vecLib框架。
Cython
要构建NumPy的开发版本,您需要最新版本的Cython。发布的PyPi上的NumPy源包括从Cython代码生成的C文件,因此不需要安装了Cython的已发布版本。
Basic Installation¶
要安装NumPy运行:
python setup.py install
要执行可以从源文件夹运行的就地构建运行:
python setup.py build_ext --inplace
NumPy构建系统使用setuptools
(来自numpy 1.11.0,之前是平常的distutils
)和numpy.distutils
。使用virtualenv
应该按预期工作。
注意:有关NumPy本身进行开发工作的构建说明,请参阅 Setting up and using your development environment。
Parallel builds¶
从NumPy 1.10.0它也可以做一个并行构建与:
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
指定构建作业的数量。
FORTRAN ABI mismatch¶
两个最流行的开源fortran编译器是g77和gfortran。不幸的是,它们不是ABI兼容的,这意味着具体来说,你应该避免混合使用另一个构建的库。特别是,如果你的blas / lapack / atlas是用g77构建的,你必须使用g77当建立numpy和scipy;相反,如果你的地图集是用gfortran构建的,你必须使用gfortran构建numpy / scipy。这适用于大多数其他情况下使用不同的FORTRAN编译器。
Choosing the fortran compiler¶
使用gfortran构建:
python setup.py build --fcompiler=gnu95
有关详细信息,请参阅:
python setup.py build --help-fcompiler
How to check the ABI of blas/lapack/atlas¶
一个相对简单和可靠的方法来检查用于构建库的编译器是在库上使用ldd。如果libg2c.so是一个依赖,这意味着已经使用了g77。如果libgfortran.so是一个依赖,gfortran已被使用。如果两者都是依赖,这意味着两者都被使用,这几乎总是一个很坏的主意。
Disabling ATLAS and other accelerated libraries¶
NumPy中ATLAS和其他加速库的使用可以通过以下方式禁用:
BLAS=None LAPACK=None ATLAS=None python setup.py build
Supplying additional compiler flags¶
可以通过设置OPT
,FOPT
(用于Fortran)和CC
环境变量来提供附加的编译器标志。