安装numpy的唯一前提条件是python本身已经安装。如果还没有安装python,并且想以最简单的方式开始学习,我们建议下载使用Anaconda(如果访问国外仓库很慢,可以使用 清华开源软件镜像站1下载anaconda安装包) - 它包含了python、Numpy、和其他许多科学计算和数据科学的常用库

Numpy可以通过conda、通过pip、通过使用macos或者linux上的包管理器来安装,也可以通过编译源码来实现安装。更多详细信息、参考下面的python和numpy安装部分。

CONDA

如果使用conda,那么可以从默认仓库或者conda-forge仓库来安装Numpy:

1
2
3
4
5
6
7
8
9
# python最佳实践、不在base环境中安装各种包,而是创建单独环境
conda create -n my-env     
conda activate my-env

# 如果想从conda-forge安装
conda config --env --add channels conda-forge

# 安装numpy的命令
conda install numpy

PIP

如果使用pip,安装numpy命令如下:

1
pip install numpy

同样,使用pip时,创建虚拟环境也是良好的实践 - 参考下面的可重现的安装和本文了解使用虚拟环境的细节

安装验证

1
2
#测试安装是否成功, 安装成功应该没有输出,安装失败会提示没有numpy模块
python -c "import numpy as np"

python和numpy安装

Python中安装和管理包很复杂、对多数任务来说一般存在一定数量的可选择方案。本文试着让读者了解最佳的(或者是最流行的)解决方案,并给出明确建议。

推荐安装建议

我们基于读者的熟悉程度和对操作系统的偏好给出我们的建议, 如果在“新手”和“高级”中间、请选择"新手"以保持简单、 或者选择“高级”以遵循最佳实践并在未来运行的更持久些。

新手

在所有Windows、macOS、和linux系统中:

安装Anaconda(包括了所有需要的库以及下面提及的所有其他的工具)

  • 使用Jupyter Notebook进行探索性的、交互性的编写和执行代码
  • 使用Spyder或者Visual Studio Code编写脚本和库
  • 使用Anaconda navigator来管理库和启动Jupyter2,Spyder3,或者Visual Studio Code4

高级用户

使用CONDA的高级用户

安装 Miniforge

保持conda base环境精简、使用当前任务或者项目所在的一个或者多个conda环境来安装库

更喜欢 PIP/PYPI的高级用户

对于从个人偏好或者阅读下面的conda和pip之间主要区别的的用户,如果更喜欢pip/基于pypi的方案,我们建议:

从python.org下载安装python,或者使用Homebrew或者其他的Linux库管理器来安装python。 使用当前维护最好的Poetry5工具来提供类似conda方式的依赖解析和环境管理能力。

PYTHON包管理

在PYTHON中管理包很有挑战性,由此,当前有许多工具可用。

对于Web开发和通用目的python开发,使用pip提供了大量的包可用。

对于高性能计算(HPC),可以考虑Spack6工具。

对大多数numpy使用者,conda和pip是最流行的包管理工具。

PIP & CONDA 比较

安装python包的两个主要工具是 pip 和 conda。 它们的功能也有部分重叠(比如、都可以安装numpy)。 然而,它们也能一起配合提供功能。 这里我们要讨论下pip和conda之间的最大不同–理解这个不同对于高效管理包非常重要

第一个不同、conda是跨语言的工具、它可以安装python语言,而pip是在你系统中特定python版本中安装的工具,pip后续安装的其他包也是为此相同python安装使用的。这个不同也意味着conda可以安装你可能需要的非python的库和工具(比如、各种编译器、CUDA、HDF5), 而pip没有这样的功能。

第二个不同、pip从python索引库PYPI(Python Packaging Index)安装各种库,而conda从自己的频道(一般是"defaults"或者"conda-forge"). 目前为止、PYPI拥有最多的包集合,不过所有的流行的包在conda内也都有。

第三个不同、conda是包管理、包依赖管理和开发环境管理的集成方案,而使用pip就可能需要其他工具(非常多!)来管理开发环境或者复杂的依赖关系。

可重现的安装

随着包更新、代码运行的结果可能改变,甚至你的代码可能会完全崩溃。因此,拥有重新构建项目所使用包的集合以及相应版本就很重要。

这方面最佳实践包括:

对每个进行的项目使用不同的环境, 使用库安装工具记录下包的名称和版本; 以下每个记录文件中包含对应的元数据格式:

  • Conda: conda环境和环境文件environment.yml
  • Pip: 虚拟环境和环境文件 requirements.txt
  • Poetry: 虚拟环境和环境文件 pyproject.toml

Numpy库 & 加速线性代数库

虽然Numpy不依赖与任何其他python包,但是,它确实依赖于加速线性代数库-典型的是Intel MKL或者OpenBLAS. 普通用户不必但系这些(在所有numpy安装方法中已经自动包含了这个). 超级用户可能还是需要知道这个细节、应为使用的BLAS可能影响性能、库的表现ß和磁盘大小。

在普通索引库中的Numpy wheels文件,也就是pip命令安装的numpy,是使用OpenBLAS构建的。在wheel文件中包含了这个OpenBLAS文件、这导致wheel文件很大,并且如果用户也安装了(比如)Scipy,那么就会在磁盘上有了OpenBLAS的两份拷贝。

在conda默认频道安装的numpy,使用了Intel MKL构建。MKL是一个单独的库,在安装Numpy的时候在用户的环境中会安装MKL。

在conda-forge频道,Numpy构建使用了一个dummy假的 “BLAS”包。当用户从conda-forge下载安装numpy时候,同时也选择这个BLAS库的某个实现来安装 - 默认是 OpenBLAS,但是它也可以是MKL(从默认频道安装的)、甚至BLIS或者参考的BLAS.

MKL库比OpenBLAS大很多,它占用约700 MB的磁盘,而OpenBLAS仅仅 30 MB。

MKL 通常会快一点、健壮一点,相对于OpenBLAS

除了以上的磁盘大小、性能和健壮性、还有如下两点需要考虑:

Intel MKL不是开源的库。正常使用的这不是问题、但是如果用户需要再次分发使用numpy构建的应用,这可能成为一个问题。 MKL和OpenBLAS都利用多线程来处理如np.dot类的函数调用,线程的数量由编译时参数和运行环境变量来决定。 通常这回使用所有的CPU核心。这对用户来说是非预期的。Numpy本身不会自动并行化任何函数调用。多线程通常会产生更好的效率,但是也可能有害 -比如使用另外层次的并行化处理,如Dask、scikit-learn或者多进程处理。

相关网站


  1. Anaconda 安装包也可以到清华大学开源软件镜像站TUNA下载,链接是https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ↩︎

  2. Jupyter Notebook https://jupyter.org/ ↩︎

  3. Spyder IDE https://www.spyder-ide.org/ ↩︎

  4. Visual Studio Code https://code.visualstudio.com/ ↩︎

  5. Poetry https://python-poetry.org/ ↩︎

  6. Spack is a package manager for supercomputers,linx and macOS https://spack.io/ ↩︎