Pygraphviz安装记录

机器学习
数据可视化
Author

Tom

Published

November 9, 2023

这是一次失败的安装记录。起因是我想试一下 pybaobabdt,而 pybaobabdt 需要安装 Pygraphviz。网上大部分资料都是使用 Christoph Gohlke 提供的 whl 文件进行本地安装,而我的 Python 版本是 3.11,没有相应的 whl 文件,于是我打算参考官方文档使用 pip 进行安装。此刻,我还不知道这个决定意味着什么:)

在软件开发中,“wheel” 是一个特定的 Python 包发布格式,通常用于 Python 包的分发和安装。Wheel 文件通常包含了已经编译好的二进制代码,以及与特定操作系统和 Python 版本兼容的相关文件,以便更快地安装 Python 包,而无需进行编译。

Wheel 文件的主要优势在于它们可以节省时间,因为它们不需要在安装时进行编译,而是直接使用预编译的二进制代码,因此安装速度更快。这对于大型项目和依赖复杂的 Python 包非常有用,因为它们通常需要较长时间来编译。 Wheel 文件通常以 “.whl” 扩展名结尾,例如 “mypackage-1.0-py3-none-any.whl”,其中 “mypackage” 是包的名称,“1.0” 是版本号,“py3” 表示兼容的 Python 版本,“none” 表示与操作系统无关,“any” 表示适用于任何操作系统。

Python 的包管理工具 pip 支持从 wheel 文件安装 Python 包,因此开发者可以更轻松地将其包分发给其他用户,并确保兼容性和安装速度。通常,当你使用 pip 安装 Python 包时,它会首先尝试使用 wheel 文件,如果可用的话,以提高安装效率。如果没有可用的 wheel 文件,pip 将使用源代码进行安装,需要编译并构建包。 —— ChatGPT

根据官方文档,在 windows 系统上安装 Pygraphviz,首先需要手动下载安装 Graphviz,并将 Graphviz 添加到环境变量。

Graphviz是一个开源的图形可视化工具,用于绘制各种类型的图形,如有向图、无向图和树。它提供了一种简单的描述图形的语言(通常是DOT语言),通过这种语言,你可以指定图形的节点、边和布局等属性。Graphviz会将这些描述转换为可视化图形。它支持多种输出格式,包括PNG、PDF、SVG等。Graphviz是一个独立的工具,不直接与Python关联。

其次,需要下载安装 Visual C/C++。然后使用 pip 进行安装:

python -m pip install --use-pep517 `
              --config-setting="--global-option=build_ext" `
              --config-setting="--global-option="-IC:\ProgramFiles\Graphviz\include" `
              --config-setting="--global-option="-LC:\ProgramFiles\Graphviz\lib" `
              pygraphviz

然后收获如下报错:

pygraphviz/graphviz_wrap.c(3020): fatal error C1083: 无法打开包括文件: “graphviz/cgraph.h: No such file or directory

C:\Program Files\Graphviz\include\graphviz\ 下确实可以找到 cgraph.h 这个文件。这个报错查阅了很多资料,都无法解决,几个小时过去了,在 Medium 上看到了一篇文章 Trying to install pygraphviz on windows is a real pain,真是说出了我的心声:(

最后无奈选择了在 WSL2 上安装。在 WSL2 Ubuntu18.04 上安装就简单多了,虽然也出现了报错:

ERROR: Could not build wheels for pygraphviz, which is required to install pyproject.toml-based projects

根据一篇教程也很容易就解决了:)

参考资料

  • https://pygraphviz.github.io/documentation/stable/install.html
  • https://www.lfd.uci.edu/~gohlke/pythonlibs/
  • https://github.com/pygraphviz/pygraphviz/issues/155
  • https://medium.com/@notokesporketokas/trying-to-install-pygraphviz-on-windows-is-a-real-pain-82502752365b
  • https://bobbyhadz.com/blog/python-could-not-build-wheels-for-which-use-pep-517