安装科学包#

科学软件往往比大多数软件有更复杂的依赖关系,并且通常会有多个构建选项,以利用不同类型的硬件或与不同外部软件互操作。

特别是,NumPy科学 Python 堆栈 中大多数软件提供了基础,可以配置为与不同的 FORTRAN 库互操作,并且可以利用现代 CPU 中的不同级别的矢量化指令。

从 NumPy 1.10.4 版和 SciPy 1.0.0 版开始,PyPI 上提供了 wheel 格式的所有主要操作系统(Windows、macOS 和 Linux)的预构建 32 位和 64 位二进制文件。但请注意,在 Windows 上,NumPy 二进制文件链接到 ATLAS BLAS/LAPACK 库,仅限于 SSE2 指令,因此它们可能无法提供最佳的线性代数性能。

有许多其他选项可用于获取科学 Python 库(或任何其他需要编译环境才能从源代码安装且不提供 PyPI 上的预构建 wheel 文件的 Python 库)。

从源代码构建#

使 NumPy(以及许多依赖它的项目)难以作为 wheel 文件分发的相同复杂性也使它们难以自己从源代码构建。然而,对于愿意花时间为 C 和 FORTRAN 争论编译器和链接器的勇敢的人来说,从源代码构建始终是一种选择。

Linux 发行版包#

对于 Linux 用户,系统包管理器通常会预编译各种科学软件,包括 NumPy 和科学 Python 堆栈的其他部分。

如果可以使用几个月前的版本,那么这可能是一个不错的选择(在使用虚拟环境时,只需确保允许访问安装到系统 Python 中的发行版)。

Windows 安装程序#

许多目前不(或不能)发布 wheel 文件的 Python 项目至少会发布 Windows 安装程序,无论是在 PyPI 上还是在其项目下载页面上。使用这些安装程序可以让用户无需设置合适的环境来在本地构建扩展。

这些安装程序中提供的扩展通常与 python.org 上发布的 CPython Windows 安装程序兼容。

与 Linux 系统包一样,Windows 安装程序只会安装到系统 Python 安装中 - 它们不支持在虚拟环境中安装。在使用虚拟环境时允许访问安装到系统 Python 中的发行版是一种解决此限制的常见方法。

Wheel 项目还提供了一个 wheel convert 子命令,该子命令可以将 Windows bdist_wininst 安装程序转换为 wheel。

macOS 安装程序和包管理器#

与 Windows 上的情况类似,许多项目(包括 NumPy)发布与 python.org 上发布的 macOS CPython 二进制文件兼容的 macOS 安装程序。

macOS 用户还可以访问 Linux 发行版风格的包管理器,例如 Homebrew。SciPy 网站提供了有关使用 Homebrew 在 macOS 上安装 SciPy 的更多详细信息。

SciPy 发行版#

SciPy 网站列出了 多个发行版,这些发行版以易于使用和更新的格式向最终用户提供完整的 SciPy 堆栈。

其中一些发行版可能与标准的基于 pipvirtualenv 的工具链不兼容。

Spack#

Spack 是一款灵活的包管理器,旨在支持多个版本、配置、平台和编译器。它旨在满足大型超级计算中心和科学应用团队的需求,他们通常必须以多种不同的方式构建软件。Spack 不仅限于 Python;它可以为 CC++FortranR 和其他语言安装包。它是非破坏性的;安装一个包的新版本不会破坏现有安装,因此许多配置可以在同一系统上共存。

Spack 提供了一种简单但强大的语法,允许用户简洁地指定版本和配置选项。包文件使用纯 Python 编写,并且它们是模板化的,因此可以使用单个包文件轻松地交换编译器、依赖项实现(如 MPI)、版本和构建选项。Spack 还会生成模块文件,以便可以从用户的环境中加载和卸载包。

跨平台包管理器 conda#

Anaconda 是由 Anaconda, Inc. 发布的 Python 发行版。它是一个稳定的开源包集合,用于大数据和科学用途。从 Anaconda 5.0 版本开始,默认安装约 200 个包,并且可以从 Anaconda 存储库安装和更新总共 400-500 个包。

conda 是 Anaconda 中包含的一个开源(BSD 许可)包管理系统和环境管理系统,允许用户安装二进制软件包及其依赖项的多个版本,并在它们之间轻松切换。它是一个跨平台工具,可在 Windows、macOS 和 Linux 上运行。Conda 可用于打包和分发各种包,它不仅限于 Python 包。它完全支持本机虚拟环境。Conda 使环境成为一等公民,即使对于 C 库,也可以轻松创建独立的环境。它使用 Python 编写,但与 Python 无关。Conda 将 Python 本身作为包进行管理,因此可以 conda update python,这与仅管理 Python 包的 pip 不同。Conda 在 Anaconda 和 Miniconda 中可用(一个易于安装的下载,仅包含 Python 和 conda)。