Qiskit/rustworkx
GitHub: Qiskit/rustworkx
基于 Rust 高性能实现的 Python 图计算库,提供快速图数据结构与算法支持,适合替代 NetworkX 处理大规模图分析。
Stars: 1653 | Forks: 206
# rustworkx
[](https://opensource.org/licenses/Apache-2.0)

[](https://travis-ci.com/Qiskit/rustworkx)
[](https://github.com/Qiskit/rustworkx/releases)
[](https://pypi.org/project/rustworkx/)
[](https://coveralls.io/github/Qiskit/rustworkx?branch=main)
[](https://rust-lang.github.io/rfcs/2495-min-rust-version.html)
[](https://doi.org/10.21105/joss.03968)
[](https://arxiv.org/abs/2110.15221)
[](https://doi.org/10.5281/zenodo.5879859)
- 您可以在以下网址查看完整的渲染文档:
一个用 Rust 编写的高性能、通用 Python 图库。
## 使用方法
安装完成后,只需导入 `rustworkx` 即可。
所有的图类和顶级函数都可以通过单次导入访问。
为了说明这一点,以下示例计算了无向图中两个节点 `A` 和 `C` 之间的最短路径。
```
import rustworkx
# Rustworkx 的无向图类型。
graph = rustworkx.PyGraph()
# 每次调用 add node 时,它都会返回一个新的 node index
a = graph.add_node("A")
b = graph.add_node("B")
c = graph.add_node("C")
# add_edges_from 接受 node index 和权重的元组,
# 并返回 edge index
graph.add_edges_from([(a, b, 1.5), (a, c, 5.0), (b, c, 2.5)])
# 返回路径 A -> B -> C
rustworkx.dijkstra_shortest_paths(graph, a, c, weight_fn=float)
```
## 安装 rustworkx
rustworkx 已发布在 [PyPI](https://pypi.org/project/rustworkx/) 上,因此在 x86\_64、i686、ppc64le、s390x 和 aarch64 架构的 Linux 系统、Mac OSX 的 x86\_64 架构,以及 32 位和 64 位 Windows 系统上,安装只需运行:
```
pip install rustworkx
```
这将会把预编译版本的 rustworkx 安装到您的 Python 环境中。
### 在没有预编译二进制文件的平台上安装
如果没有为您的系统发布预编译的二进制文件,您将必须从源代码构建该软件包。但是,要从已发布的源代码包构建该软件包,您需要安装 Rust >= 1.85(以及通常包含在 rust 中的 [cargo](https://doc.rust-lang.org/cargo/))。您可以使用 [rustup](https://rustup.rs/)(一个跨平台的 Rust 安装程序)来简化此过程,或者依赖[其他安装方法](https://forge.rust-lang.org/infra/other-installation-methods.html)。
源代码包同样发布在 PyPI 上,因此您依然可以运行上述 `pip` 命令进行安装。一旦您正确安装了 Rust,运行:
```
pip install rustworkx
```
将从源代码包为您的本地系统构建 rustworkx 并进行安装,其效果与有预编译二进制文件时一样。
### 可选依赖
如果您计划使用 `rustworkx.visualization` 模块,您需要安装可选依赖才能使用其中的函数。基于 matplotlib 的绘图函数 `rustworkx.visualization.mpl_draw` 需要安装 [matplotlib](https://matplotlib.org/) 库。您可以通过 `pip install matplotlib` 进行安装,或者在安装 rustworkx 时使用 `pip install 'rustworkx[mpl]'`。如果您打算使用基于 graphviz 的绘图函数 `rustworkx.visualization.graphviz_drawer`,首先您需要安装 graphviz,相关说明可以在这里找到:
https://graphviz.org/download/#executable-packages。然后
您需要安装 [pillow](https://python-pillow.github.io/) Python 库。
这可以通过 `pip install pillow` 完成,或者在安装 rustworkx 时使用
`pip install 'rustworkx[graphviz]'`。
如果您想在安装 rustworkx 时安装所有可选的 Python 依赖,可以使用 `pip install 'rustworkx[all]'`。
### Conda 生态系统
社区支持的二进制文件已发布到 [conda-forge](https://anaconda.org/conda-forge/rustworkx)。虽然这些是非官方的,但它们对于 `conda` 生态系统(包括 `mamba`、`micromamba` 和 `pixi`)的用户会非常有帮助。只需运行以下命令即可安装:
```
conda install -c conda-forge rustworkx
```
## 作者与引用
rustworkx 是在不同层面为项目做出贡献的[许多人](https://github.com/Qiskit/rustworkx/graphs/contributors)的共同作品。如果您在研究中使用了 rustworkx,请按照随附的 [BibTeX 文件](CITATION.bib)引用我们的[论文](https://doi.org/10.21105/joss.03968)。
## 从源代码构建
从源代码构建 rustworkx 的第一步是使用以下命令在本地克隆它:
```
git clone https://github.com/Qiskit/rustworkx.git
```
rustworkx 使用 [PyO3](https://github.com/pyo3/pyo3) 和 [setuptools-rust](https://github.com/PyO3/setuptools-rust) 来构建 Python 接口,这使得能够使用标准的 Python 工具进行工作。因此,假设您已经安装了 Rust,您可以使用 `pip` 轻松地将 rustworkx 安装到您的 Python 环境中。一旦您拥有了仓库的本地克隆,请将当前工作目录切换到仓库的根目录。然后,您可以使用以下命令将 rustworkx 安装到您的 Python 环境中:
```
pip install .
```
假设您的当前工作目录仍然是仓库的根目录。
否则您可以运行:
```
pip install $PATH_TO_REPO_ROOT
```
这将以相同的方式安装它。然后 rustworkx 就安装在您的本地 Python 环境中了。这样做时有两点需要注意,首先,如果您使用此方法尝试从仓库根目录运行 Python,它将不会如您预期的那样工作。由于用于构建包的本地 Python 包垫片,仓库根目录中存在名称冲突。只需在仓库根目录之外运行使用 rustworkx 的 Python 脚本或程序即可。第二个问题是,您对 Rust 代码所做的任何本地更改都不会在您的 Python 环境中实时反映出来,您需要通过重新运行 `pip install` 来重新编译 rustworkx,以便在您的 Python 环境中反映任何更改。
### 开发模式
如果您想在开发更改时以调试模式构建 rustworkx 并使用交互式调试器,您可以将 `SETUPTOOLS_RUST_CARGO_PROFILE="dev"` 设置为环境变量,以便在开发模式下构建和安装 rustworkx。
这将在运行 `pip install` 时不进行优化并包含 debuginfo 来构建 rustworkx。这对于调试非常方便。
## 项目历史
Rustworkx 最初被称为 retworkx,最初创建时是为了替代 [Qiskit](https://www.ibm.com/quantum/qiskit) 之前(以及当前)的 NetworkX 用法(因此得名)。该项目最初启动是为了构建一个更快的有向图,用作 [qiskit](https://github.com/Qiskit/qiskit/) 转换器中心 DAG 的底层数据结构。然而,自最初引入以来,该项目已经大幅发展,现在涵盖了包括 Qiskit 在内的所有需要处理图的应用。
标签:PyGraph, Python, Qiskit, Rust, 可视化界面, 图算法, 图论, 开源库, 搜索引擎爬虫, 数据结构, 无后门, 无向图, 最短路径, 有向图, 流量捕获, 科学计算, 系统分析, 网络分析, 网络拓扑, 网络流量审计, 跨语言调用, 逆向工具, 通知系统, 高性能计算