安装 igraph

从源代码编译 igraph

您可能希望编译 igraph 以在发布前测试最近添加的功能,或者在我们的持续开发流程未涵盖的架构上安装 igraph

注意

在所有情况下,Python 接口都需要针对 igraph 核心 C 库的**匹配**版本进行编译。如果您使用 git 检出源代码树,git 可能已经足够智能地将 igraph C 核心的匹配版本作为子模块检出到 vendor/source/igraph 中。您可以使用 git submodule update --init --recursive 手动检出子模块,或者运行 git submodule status 以打印应与 Python 接口一起使用的 igraph C 核心的确切修订版本。

使用 pip 编译

如果您想要 igraph 的开发版本,请调用

$ pip install git+https://github.com/igraph/python-igraph

pip 足够智能,可以从 Github 下载源代码,初始化 igraph C 核心的子模块,编译它,然后针对它编译 Python 接口并安装。如上所述,虚拟环境是测试实验性软件包的常用沙盒。

如果您想要 PyPI 上的最新版本,但更喜欢(或必须)从源代码安装,请调用

$ pip install --no-binary ':all:' igraph

注意

如果您的系统无论如何都没有二进制文件,您可以直接尝试不带 --no-binary 选项,结果将相同。

逐步编译

本节在实践中应该很少使用,但它解释了如何从本地检出逐步编译和安装 igraph,即**不**依赖 pip 获取源代码。(您仍然需要 pip 从源代码安装,或者像 build 这样的符合 PEP 517 的构建前端来构建可安装的 Python wheel。)

首先,从 Github 获取最新源代码

$ git clone https://github.com/igraph/python-igraph.git

或从 PyPIGithub 发布页面下载最新版本。如果需要,请解压缩存档。

其次,进入文件夹

$ cd python-igraph

(根据发布版本,它可能具有略微不同的名称)。

第三,如果您从 Github 克隆了源代码,请初始化 igraph C 核心的 git 子模块

$ git submodule update --init

注意

如果您更喜欢将 igraph 编译并链接到现有的 igraph C 核心,例如您使用包管理器安装的那个,则可以跳过 git 子模块初始化步骤。如果您下载的是 tarball,您还需要删除 vendor/source/igraph 文件夹,因为安装脚本会首先查找供应商提供的 igraph 副本。但是,Python 接口的特定版本仅保证与捆绑的 C 核心版本(或 git 子模块指向的修订版本)一起工作。

第四,调用 pip 从源代码编译并安装包

$ pip install .

或者,您可以调用 build 或其他符合 PEP 517 的构建前端来构建可安装的 Python wheel。在这里,我们使用 pipx 在单独的虚拟环境中调用 build

$ pipx run build

测试您的安装

使用 tox 或其他标准测试运行器工具来运行所有单元测试。在这里,我们使用 pipx 调用 tox

$ pipx run tox

如果您已在系统范围内安装了 tox,也可以直接从 igraph 源代码树的根文件夹调用 tox

$ tox

故障排除

问:我尝试在 Windows 上安装 igraph 时遇到 DLL 导入错误

答:此错误最常见的原因是您的机器上没有安装 Visual C++ 可再发行库。Python 自身的安装程序应该会安装它,但如果您的系统上未安装,您可以从 Microsoft 下载

问:我尝试使用 igraph 时遇到关于 Cairo 的错误

答:igraph 默认使用名为 Cairo 的第三方库进行绘图。如果您的计算机上未安装 Cairo,您可能会收到导入错误。此错误最常出现在 Windows 机器上。

解决此问题有两种方法:安装 Cairo,或者,如果您使用的是最新版本的 igraph,切换到 matplotlib 绘图后端。

1. 安装 Cairo:如此处所述,您需要使用包管理器(Linux)或 homebrew (macOS) 安装 Cairo 头文件,然后

$ pip install pycairo

要检查 Cairo 是否在您的系统上正确安装,请运行以下示例

>>> import igraph as ig
>>> g = ig.Graph.Famous("petersen")
>>> ig.plot(g)

如果 PyCairo 成功安装,这将显示一个 Petersen 图。

2. 切换到 matplotlib:您可以配置 igraph 使用 matplotlib 而不是 Cairo。首先,安装它

$ pip install matplotlib

要将 matplotlib 用于单个绘图,请事先创建一个 matplotlib.figure.Figurematplotlib.axes.Axes(例如,使用 matplotlib.pyplot.subplots()

>>> import matplotlib.pyplot as plt
>>> import igraph as ig
>>> fig, ax = plt.subplots()
>>> g = ig.Graph.Famous("petersen")
>>> ig.plot(g, target=ax)
>>> plt.show()

要将 matplotlib 用于整个会话/notebook

>>> import matplotlib.pyplot as plt
>>> import igraph as ig
>>> ig.config["plotting.backend"] = "matplotlib"
>>> g = ig.Graph.Famous("petersen")
>>> ig.plot(g)
>>> plt.show()

要在会话/notebook 之间保留此偏好设置,您可以将其存储在 igraph 使用的默认配置文件中

>>> import igraph as ig
>>> ig.config["plotting.backend"] = "matplotlib"
>>> ig.config.save()

从现在开始,igraph 将默认使用 matplotlib 进行绘图。