Ubuntu 22.04 安装 Apache GraphAr 指南
Ubuntu 22.04 从零安装 Apache GraphAr Python SDK 完整指南:版本选型与 pygraphar 包名陷阱排障、在线 pip 与离线 wheel 两种安装方案实测、GAR_TEST_DATA 配置、升降级与卸载清理。
Ubuntu 22.04 安装 Apache GraphAr 指南
目标:在全新 Ubuntu 22.04 服务器上从零安装 Apache GraphAr 官方 Python SDK(PyPI 包名
graphar),覆盖版本选型、包名陷阱排障、在线与离线两种安装方案、基础配置、版本升降级与卸载清理。所有命令与回显均在真实环境完整执行并记录(Ubuntu 22.04.5 LTS,Python 3.10.12,graphar 0.13.0.dev1)。
一、环境信息
本指南的实测环境如下,读者在同等环境操作时回效应可完全对齐:
- 操作系统:Ubuntu 22.04.5 LTS(x86_64),root 用户
- Python:3.10.12(系统自带)
- 目标组件:Apache GraphAr Python SDK 0.13.0.dev1(PyPI 包
graphar,含 C++ 核心库、Python 绑定与 CLI 工具) - 安装方式:pip(在线方案 A 与离线 wheel 方案 B)
- 虚拟环境路径:
/opt/venv-graphar(方案 A)、/opt/venv-graphar-offline(方案 B 演示)
实测环境的基础版本确认:
python3 -V && pip3 --version
Python 3.10.12
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
💡 说明:Ubuntu 22.04 自带 Python 3.10,满足 graphar wheel 的最低要求(cp39 起);系统自带 pip 22.0.2 较旧,本指南会在虚拟环境中先升级 pip 再安装,避免老版本 pip 的兼容性问题。
二、前置条件
2.1 系统与网络要求
- 能访问 Ubuntu 软件源(安装 Python 基础包);
- 能访问 PyPI 官方源
pypi.org(在线方案 A 必需;方案 B 的下载机需要,目标机器不需要); - 磁盘空间 200MB 以上(wheel 及依赖约 30MB,虚拟环境约 120MB)。
2.2 安装基础软件包
全新系统先安装 Python 与虚拟环境支持(实测回显末尾节选):
apt-get update && apt-get install -y python3 python3-venv python3-pip curl
Setting up python3-pip (22.0.2+dfsg-1ubuntu0.7) ...
Setting up python3-dev (3.10.6-1~22.04.1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...
安装完成后的验证手段:
python3 -V && python3 -m venv --help | head -2
Python 3.10.12
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear]
2.3 创建并升级虚拟环境
不要把 GraphAr 装进系统 Python,统一使用虚拟环境隔离依赖:
python3 -m venv /opt/venv-graphar && /opt/venv-graphar/bin/pip install --upgrade pip
Downloading pip-26.2.1-py3-none-any.whl (1.8 MB)
Found existing installation: pip 22.0.2
Uninstalling pip-22.0.2:
Successfully uninstalled pip-22.0.2
Successfully installed pip-26.2.1
💡 说明:升级 pip 非常关键——实测在 pip 26.2.1 下
pip install graphar无需额外参数即可正确回退安装预发布版本(见 4.2 节回显),老版本 pip 遇到仅有预发布的包可能直接报错。
三、版本选型说明
3.1 包名辨析:graphar 是唯一正确包名(排障实录)
PyPI 上存在两个名字极像的包,实测确认只有 graphar 是 Apache GraphAr 官方包:
pip index versions pygraphar
pygraphar (0.0.1)
Available versions: 0.0.1
pip index versions graphar --pre
graphar (0.13.0.dev1)
Available versions: 0.13.0.dev1, 0.13.0.dev0
INSTALLED: 0.13.0.dev1
LATEST: 0.13.0.dev1
用 PyPI JSON 接口核实 pygraphar 的真实身份(实测):
curl -s https://pypi.org/pypi/pygraphar/json | python3 -c "import json,sys; d=json.load(sys.stdin); i=d['info']; print('name:', i['name']); print('version:', i['version']); print('summary:', i['summary']); print('home:', i['home_page']); print('releases:', sorted(d['releases'].keys()))"
name: pygraphar
version: 0.0.1
summary: None
home: https://github.com/alibaba/GraphScope
releases: ['0.0.1']
可见 pygraphar 归属 GraphScope 项目,只是占位包。误装它的实测结果:
pip install pygraphar
Collecting pygraphar
Downloading pygraphar-0.0.1-py3-none-any.whl (10 kB)
Collecting etcd-distro>=3.5.1 (from pygraphar)
Downloading etcd_distro-1.3.3-py3-none-any.whl.metadata (3.6 kB)
INFO: pip is looking at multiple versions of pygraphar to determine which version is compatible with other requirements. This could take a while.
(中间为依赖解析与版本列举行)
ERROR: No matching distribution found for graphscope-client==0.0.1
⚠️ 注意:
pygraphar会尝试拉取早已不存在的 graphscope-client 0.0.1 并安装失败;即便未来装上,导入的也是 GraphScope 的模块而非 GraphAr。请记住结论——安装 Apache GraphAr 用pip install graphar。
3.2 版本形态与可用版本
graphar 当前只有预发布版本(0.13.0.dev0、0.13.0.dev1),无正式稳定版:
- 推荐 0.13.0.dev1:本指南全部实测基于该版本,
graphar --version返回GraphAr CLI Version: 0.13.0.dev1; - 0.13.0.dev0 实测不可用:安装后
import graphar报动态链接符号错误(复现回显见 7.3 节),属该 dev 版本自身的打包缺陷; - 版本查询注意:
pip index versions graphar不带--pre会报ERROR: No matching distribution found for graphar(实测,详见 8.1 节),因为查询行为默认排除预发布版本。
3.3 Python 版本与 wheel 兼容范围
| 维度 | 实测结论 |
|---|---|
| wheel 覆盖 | cp39、cp310、cp311、cp312、cp313(manylinux x86_64),requires-python >= 3.9 |
| 本指南环境 | cp310(Python 3.10.12),wheel 约 22MB |
| 运行时依赖 | typer、pydantic、pyyaml、pytest 四个纯 Python/C 扩展包,无需编译工具链 |
| 源码构建 | 仅当需要从源码构建时才要求 Python >= 3.10 并安装 pyarrow==24.0.0 等构建依赖 |
| Java/Spark 侧 | Maven Central 无 org.apache.graphar 构件(实测访问 https://repo1.maven.org/maven2/org/apache/graphar/ 返回 404),只能源码构建,不在本指南范围 |
💡 说明:日常使用装 wheel 即可,没有编译环节;
python3-dev在 2.2 节随系统包一并装上,仅为源码构建场景预留。
四、方案 A:在线 pip 安装(推荐主方案)
4.1 方案说明
目标机器能访问 PyPI 时,一条命令完成安装,pip 自动解析并安装 19 个依赖包。这是官方推荐、也是实测最可靠的路径。
4.2 安装步骤与实测回显
/opt/venv-graphar/bin/pip install graphar
Collecting graphar
Downloading graphar-0.13.0.dev1-cp310-cp310-manylinux_2_28_x86_64.whl (15.3 MB)
Installing collected packages: typing-extensions, tomli, shellingham, pyyaml, pygments, pluggy, packaging, mdurl, iniconfig, annotated-types, annotated-doc, typing-inspection, pydantic-core, markdown-it-py, exceptiongroup, rich, pytest, pydantic, typer, graphar
Successfully installed annotated-doc-0.0.5 annotated-types-0.8.0 exceptiongroup-1.3.1 graphar-0.13.0.dev1 iniconfig-2.3.1 markdown-it-py-4.2.0 mdurl-0.1.2 packaging-26.3 pluggy-1.6.0 pydantic-2.11.10 pydantic-core-2.33.2 pygments-2.21.0 pytest-7.4.4 pyyaml-6.0.3 rich-15.0.0 shellingham-1.5.4 tomli-2.5.0 typer-0.27.3 typing-extensions-4.16.0 typing-inspection-0.4.4
⚠️ 注意:不带
--pre也能装上——因为包没有稳定版本,pip 会回退选择最新预发布版本 0.13.0.dev1(实测回显即证)。若需显式锁定,可写pip install graphar==0.13.0.dev1。
4.3 安装验证
三重验证:包信息、模块导入、CLI 可用性(实测回显):
/opt/venv-graphar/bin/pip show graphar
Name: graphar
Version: 0.13.0.dev1
Summary: An open source, standard data file format for graph data storage and retrieval.
Author-email: GraphAr community <dev@graphar.apache.org>
License: Apache-2.0
Location: /opt/venv-graphar/lib/python3.10/site-packages
Requires: pydantic, pytest, pyyaml, typer
Required-by:
/opt/venv-graphar/bin/python -c "import graphar; import importlib.metadata as im; print('graphar version:', im.version('graphar'))"
graphar version: 0.13.0.dev1
/opt/venv-graphar/bin/graphar --version
GraphAr CLI Version: 0.13.0.dev1
三项全部通过即安装成功。
五、方案 B:离线 wheel 包安装(内网环境)
5.1 方案说明
目标机器无法访问公网时,先用一台联网机器把 graphar 及全部依赖的 wheel 收集到目录,再拷贝到目标机器离线安装。实测两步均在同一台服务器上完成(以 /tmp/graphar-wheels 模拟离线包仓库)。
5.2 第一步:联网环境收集 wheel
/opt/venv-graphar/bin/pip download graphar --pre -d /tmp/graphar-wheels
Collecting graphar
Using cached graphar-0.13.0.dev1-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (3.7 kB)
Collecting typer~=0.1 (from graphar)
Using cached typer-0.27.3-py3-none-any.whl.metadata (16 kB)
(中间为 pydantic、pytest、pyyaml 及传递依赖的解析行)
Saved ./tmp/graphar-wheels/graphar-0.13.0.dev1-cp310-cp310-manylinux_2_28_x86_64.whl
(中间为其余 19 个依赖 wheel 的 Saved 行)
Successfully downloaded graphar pydantic pydantic-core pytest pluggy pyyaml typer annotated-doc annotated-types exceptiongroup rich pygments markdown-it-py mdurl shellingham tomli typing-extensions typing-inspection iniconfig packaging
收集结果核对(20 个 wheel、合计 27MB,实测清单):
find /tmp/graphar-wheels -type f | sort && du -sh /tmp/graphar-wheels
/tmp/graphar-wheels/annotated_doc-0.0.5-py3-none-any.whl
/tmp/graphar-wheels/annotated_types-0.8.0-py3-none-any.whl
/tmp/graphar-wheels/exceptiongroup-1.3.1-py3-none-any.whl
/tmp/graphar-wheels/graphar-0.13.0.dev1-cp310-cp310-manylinux_2_28_x86_64.whl
/tmp/graphar-wheels/iniconfig-2.3.1-py3-none-any.whl
/tmp/graphar-wheels/markdown_it_py-4.2.0-py3-none-any.whl
/tmp/graphar-wheels/mdurl-0.1.2-py3-none-any.whl
/tmp/graphar-wheels/packaging-26.3-py3-none-any.whl
/tmp/graphar-wheels/pluggy-1.6.0-py3-none-any.whl
/tmp/graphar-wheels/pydantic-2.11.10-py3-none-any.whl
/tmp/graphar-wheels/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
/tmp/graphar-wheels/pygments-2.21.0-py3-none-any.whl
/tmp/graphar-wheels/pytest-7.4.4-py3-none-any.whl
/tmp/graphar-wheels/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
/tmp/graphar-wheels/rich-15.0.0-py3-none-any.whl
/tmp/graphar-wheels/shellingham-1.5.4-py2.py3-none-any.whl
/tmp/graphar-wheels/tomli-2.5.0-py3-none-any.whl
/tmp/graphar-wheels/typer-0.27.3-py3-none-any.whl
/tmp/graphar-wheels/typing_extensions-4.16.0-py3-none-any.whl
/tmp/graphar-wheels/typing_inspection-0.4.4-py3-none-any.whl
27M /tmp/graphar-wheels
⚠️ 注意:wheel 与目标机器的 Python 版本、操作系统平台绑定。本清单是 cp310 + manylinux x86_64 组合;若目标机器 Python 版本不同,下载时用 pip download 的 --python-version、--platform、--only-binary 参数按目标环境重新收集。
5.3 第二步:目标机器离线安装
目标机器只需有 Python 与 venv,全程不访问公网:
python3 -m venv /opt/venv-graphar-offline && /opt/venv-graphar-offline/bin/pip install --no-index --find-links /tmp/graphar-wheels graphar
Looking in links: /tmp/graphar-wheels
Processing /tmp/graphar-wheels/graphar-0.13.0.dev1-cp310-cp310-manylinux_2_28_x86_64.whl
(中间为 19 个依赖 wheel 的 Processing 行)
Installing collected packages: typing-extensions, tomli, shellingham, pyyaml, pygments, pluggy, packaging, mdurl, iniconfig, annotated-types, annotated-doc, typing-inspection, pydantic-core, markdown-it-py, exceptiongroup, rich, pytest, pydantic, typer, graphar
Successfully installed annotated-doc-0.0.5 annotated-types-0.8.0 exceptiongroup-1.3.1 graphar-0.13.0.dev1 iniconfig-2.3.1 markdown-it-py-4.2.0 mdurl-0.1.2 packaging-26.3 pluggy-1.6.0 pydantic-2.11.10 pydantic-core-2.33.2 pygments-2.21.0 pytest-7.4.4 pyyaml-6.0.3 rich-15.0.0 shellingham-1.5.4 tomli-2.5.0 typer-0.27.3 typing-extensions-4.16.0 typing-inspection-0.4.4
5.4 离线安装验证
/opt/venv-graphar-offline/bin/pip show graphar | head -3
Name: graphar
Version: 0.13.0.dev1
Summary: An open source, standard data file format for graph data storage and retrieval.
/opt/venv-graphar-offline/bin/graphar --version
GraphAr CLI Version: 0.13.0.dev1
六、方案对比与选择建议
| 维度 | 方案 A:在线 pip | 方案 B:离线 wheel |
|---|---|---|
| 目标机器联网 | 需要 | 不需要 |
| 操作步骤 | 1 条命令 | 下载收集 + 拷贝 + 2 条命令 |
| 版本控制 | pip 自动解析最新预发布 | wheel 目录里有什么就装什么,完全锁定 |
| 适用场景 | 开发机、可联网服务器(推荐) | 内网机器、批量部署、审计要求 |
| 局限 | 依赖 PyPI 可用性 | wheel 必须与目标 Python 版本/平台匹配 |
选择建议:默认用方案 A;批量部署到同规格机器时,用方案 B 的 wheel 目录作为统一分发物;两方案实测安装结果完全一致(同为 0.13.0.dev1 + 19 个同版本依赖)。
七、配置说明
7.1 虚拟环境激活与命令路径
两种日常用法:激活后直接用短命令,或不激活用绝对路径(实测等价)。激活后的命令定位与版本确认(实测回显):
source /opt/venv-graphar/bin/activate && which graphar && graphar --version
/opt/venv-graphar/bin/graphar
GraphAr CLI Version: 0.13.0.dev1
不激活时用 /opt/venv-graphar/bin/graphar、/opt/venv-graphar/bin/python 绝对路径调用(本指南全部回显均基于绝对路径方式,脚本化部署推荐该方式)。
7.2 测试数据环境变量 GAR_TEST_DATA
官方示例与测试脚本通过 GAR_TEST_DATA 定位测试数据根目录。先克隆源码仓库,并把测试数据仓库克隆到源码仓库的 testing 子目录(与官方示例的相对布局一致):
git clone --depth 1 https://github.com/apache/incubator-graphar.git /opt/incubator-graphar
git clone --depth 1 https://github.com/apache/incubator-graphar-testing.git /opt/incubator-graphar/testing
导出环境变量:
export GAR_TEST_DATA=/opt/incubator-graphar/testing
在激活虚拟环境后运行官方元数据示例验证(实测回显):
cd /opt/incubator-graphar/python/example && GAR_TEST_DATA=/opt/incubator-graphar/testing python graph_info_example.py
GraphAr GraphInfo Example
=========================
Graph name: ldbc_sample
Graph prefix: /opt/incubator-graphar/testing/ldbc_sample/parquet/
--- Vertex Info ---
Vertex type: person
Chunk size: 100
Vertex prefix: vertex/person/
Properties:
Group 0:
- id: <graphar._core.DataType object at 0x708598342170> (primary: True)
Group 1:
- firstName: <graphar._core.DataType object at 0x708598341b70> (primary: False)
- lastName: <graphar._core.DataType object at 0x708598341b70> (primary: False)
- gender: <graphar._core.DataType object at 0x708598341b70> (primary: False)
--- Edge Info ---
Edge type: knows
Source type: person
Destination type: person
Chunk size: 1024
Directed: False
Adjacency list types:
- AdjListType.unordered_by_source: FileType.PARQUET
- AdjListType.ordered_by_source: FileType.PARQUET
- AdjListType.ordered_by_dest: FileType.PARQUET
Properties:
Group 0:
- creationDate: <graphar._core.DataType object at 0x7085983426b0>
Example completed successfully!
💡 说明:
GAR_TEST_DATA只影响官方示例与测试脚本,SDK 自身的读写 API 不依赖它。该变量是「安装后跑通官方样例」的便捷开关,日常业务代码用不到。
7.3 版本升降级与多版本共存
降级到指定版本(实测从 0.13.0.dev1 降到 0.13.0.dev0):
/opt/venv-graphar-offline/bin/pip install graphar==0.13.0.dev0
Collecting graphar==0.13.0.dev0
Downloading graphar-0.13.0.dev0-cp310-cp310-manylinux_2_28_x86_64.whl (22.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 22.4/22.4 MB 29.3 kB/s eta 0:00:00
Requirement already satisfied: pyyaml~=6.0 in /opt/venv-graphar-offline/lib/python3.10/site-packages (from graphar==0.13.0.dev0) (6.0.3)
(中间为其余依赖的 Requirement already satisfied 行)
Installing collected packages: graphar
Attempting uninstall: graphar
Found existing installation: graphar 0.13.0.dev1
Uninstalling graphar-0.13.0.dev1:
Successfully uninstalled graphar-0.13.0.dev1
Successfully installed graphar-0.13.0.dev0
降级后的实测问题:0.13.0.dev0 存在动态链接缺陷,CLI 直接不可用(实测回显):
/opt/venv-graphar-offline/bin/graphar --version
Traceback (most recent call last):
File "/opt/venv-graphar-offline/bin/graphar", line 5, in <module>
from cli.graphar_cli import main
File "/opt/venv-graphar-offline/lib/python3.10/site-packages/cli/graphar_cli.py", line 24, in <module>
from graphar._core import (
File "/opt/venv-graphar-offline/lib/python3.10/site-packages/graphar/__init__.py", line 20, in <module>
from .graph_info import *
File "/opt/venv-graphar-offline/lib/python3.10/site-packages/graphar/graph_info.py", line 18, in <module>
from ._core import DataType, Property, PropertyGroup, AdjacentList, VertexInfo, EdgeInfo, GraphInfo
ImportError: /opt/venv-graphar-offline/lib/python3.10/site-packages/graphar/libgraphar.so: undefined symbol: _ZN5arrow2fs12InitializeS3ERKNS0_15S3GlobalOptionsE
升级恢复(实测用本地 wheel 从 dev0 升回 dev1;在线场景把 --no-index --find-links 参数换成默认源即可,命令形态一致):
/opt/venv-graphar-offline/bin/pip install --no-index --find-links /tmp/graphar-wheels -U graphar
Looking in links: /tmp/graphar-wheels
Requirement already satisfied: graphar in /opt/venv-graphar-offline/lib/python3.10/site-packages (0.13.0.dev0)
Processing /tmp/graphar-wheels/graphar-0.13.0.dev1-cp310-cp310-manylinux_2_28_x86_64.whl
(中间为依赖的 Requirement already satisfied 行)
Installing collected packages: graphar
Attempting uninstall: graphar
Found existing installation: graphar 0.13.0.dev0
Uninstalling graphar-0.13.0.dev0:
Successfully uninstalled graphar-0.13.0.dev0
Successfully installed graphar-0.13.0.dev1
多版本共存:pip 不支持同一环境装两个版本,实测推荐用多个虚拟环境隔离(如 /opt/venv-graphar 装 0.13.0.dev1、另一虚拟环境装其他版本),按需切换激活。
八、常见问题(FAQ)
Q1:pip index versions graphar 报 No matching distribution found for graphar,是不是源有问题?
不是。graphar 只有预发布版本,查询默认排除预发布(实测报错即此原因)。加 --pre 即可看到 0.13.0.dev1、0.13.0.dev0(3.1 节实测回显);安装时不带 --pre 也能装上(4.2 节实测回显)。
Q2:pip install pygraphar 报错 No matching distribution found for graphscope-client==0.0.1,是 GraphAr 坏了吗?
不是 GraphAr 的问题——pygraphar 是 GraphScope 的占位包(3.1 节已核实其 home 指向 GraphScope 仓库),本来就装不上。卸掉残留(pip uninstall -y pygraphar),改用正确包名 pip install graphar。
Q3:graphar 运行时为什么不需要 numpy、pandas、pyarrow? wheel 的声明依赖只有四个(实测读取包元数据):
grep '^Requires-Dist' /opt/venv-graphar/lib/python3.10/site-packages/graphar-0.13.0.dev1.dist-info/METADATA
Requires-Dist: pydantic<2.12,~=2.0
Requires-Dist: pytest~=7.2
Requires-Dist: pyyaml~=6.0
Requires-Dist: typer~=0.1
Parquet 读写能力由包内捆绑的 C++ Arrow 运行时提供(libgraphar.so 及配套动态库随 wheel 分发),Python 侧不需要 pyarrow;pyarrow 仅在从源码构建 SDK 时才需要(3.3 节)。
Q4:import graphar 报 ModuleNotFoundError 怎么排查?
两种常见原因:装到了另一个解释器环境(用 pip show graphar 确认 Location,与 python -c "import sys; print(sys.prefix)" 输出比对);或误装了 pygraphar(模块名是 graphar 不是 pygraphar)。统一在虚拟环境内操作即可避免。
Q5:import graphar 报 undefined symbol: _ZN5arrow2fs12InitializeS3 怎么办?
这是 0.13.0.dev0 的打包缺陷(7.3 节实测复现),执行 pip install graphar==0.13.0.dev1 恢复即可;后续版本选择时避开 dev0。
Q6:git clone 官方仓库报 GnuTLS recv error (-54) 怎么处理? 这是 GitHub 访问的网络层报错(克隆 incubator-graphar 时实测出现过)。可重试克隆;持续失败时更换网络环境,或改从官方仓库的 Releases 页面下载源码压缩包。该报错只影响源码与测试数据获取,不影响 pip 安装本身。
九、卸载与清理
卸载包本体(实测):
/opt/venv-graphar-offline/bin/pip uninstall -y graphar
Found existing installation: graphar 0.13.0.dev1
Uninstalling graphar-0.13.0.dev1:
Successfully uninstalled graphar-0.13.0.dev1
确认卸载结果:
/opt/venv-graphar-offline/bin/pip show graphar
WARNING: Package(s) not found: graphar
彻底清理:直接删除虚拟环境即可连同依赖一并移除(实测验证目录已不存在):
rm -rf /opt/venv-graphar-offline && ls /opt/venv-graphar-offline
ls: cannot access '/opt/venv-graphar-offline': No such file or directory
其他清理项:离线 wheel 目录(rm -rf /tmp/graphar-wheels)、测试数据仓库目录、以及实验产出的数据目录(如 /root/graphar-demo、/tmp/import-demo-out),按需删除。pip 缓存可用 pip cache purge 清理。
十、参考链接
- PyPI 包页面:https://pypi.org/project/graphar/
- 官方代码仓库:https://github.com/apache/incubator-graphar
- 官方测试数据仓库:https://github.com/apache/incubator-graphar-testing
- Apache GraphAr 官网:https://graphar.apache.org/
- 同系列文档:《Apache GraphAr 数据读写实战详解》《Apache GraphAr 常用 CLI 命令与工具详解》