news 2026/9/15 16:55:15

如何从源码编译 JuiceFS Python SDK 得到可用的 whl 包

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何从源码编译 JuiceFS Python SDK 得到可用的 whl 包

如何从源码编译 JuiceFS Python SDK 得到可用的 whl 包

【免费下载链接】juicefsJuiceFS is a distributed POSIX file system built on top of Redis and S3.项目地址: https://gitcode.com/GitHub_Trending/ju/juicefs

JuiceFS Python SDK 适用于无法使用 FUSE 挂载的容器化或虚拟化环境。如果你的目标是在这类环境中通过 Python 访问 JuiceFS 文件系统,就需要先从源码编译出一个可安装的 whl 包,然后在目标机器上用pip安装并验证它可用。

编译有两条路径:直接编译(当前环境需要go1.20+makepython3)和Docker 容器编译(需要Dockermakego1.20+,宿主机不需要装 Go 工具链以外的 SDK 构建依赖)。两条路径的入口相同:克隆仓库并进入 SDK 目录。

# Clone JuiceFS repository git clone https://gitcode.com/GitHub_Trending/ju/juicefs # Enter JuiceFS SDK directory cd juicefs/sdk/python

后续所有命令都在sdk/python目录下执行。

路径一:直接编译

直接在当前环境编译,产物分为两步:先编译 Go 原生库 libjfs,再打包 Python wheel。

第 1 步:编译 libjfs 原生库

make libjfs

这一步会执行go build -buildmode c-shared,把 sdk/python/Makefile 中指向../java/libjfs的 Go 代码编译成共享库。编译完成后,原生库(Linux 上是libjfs.so,macOS 上是libjfs.dylib,Windows 上是libjfs.dll)和头文件libjfs.h会放在sdk/python/juicefs/juicefs目录。可以确认该目录下出现了libjfs.so(或对应平台的后缀)再进入下一步。

第 2 步:编译 Python SDK

cd juicefs && python3 -m build -w

这一步使用 Python 的build模块打包,-w表示输出 wheel 文件。编译完成的 Python SDK 位于juicefs/sdk/python/dist目录,文档给出的包名示例为juicefs-1.3.0-py3-none-any.whl

直接编译路径不会修改 sdk/python/juicefs/setup.py,包名中的版本取自其中硬编码的VERSION = "1.3.0",因此直接编译得到的文件名与文档示例一致。

路径二:使用 Docker 容器编译(可选)

如果本机不想直接跑 Go 构建,可以用项目自带的构建镜像编译,前提是系统已安装Dockermakego1.20+

第 1 步:构建 Docker 镜像

# For arm64 make arm-builder # For amd64 make builder

两个目标分别基于 Dockerfile.builder.arm 和 Dockerfile.builder 构建,镜像名都是sdkbuilder,按机器架构二选一即可。

第 2 步:执行 make juicefs

make juicefs

执行前需要知道这个目标会做三件事(见 sdk/python/Makefile):

  1. sudo rm -rf juicefs.egg-info删除本地的juicefs.egg-info缓存目录;
  2. sed把 setup.py 的VERSIONBUILD_INFO改写为构建时的版本信息;
  3. 启动sdkbuilder容器,把仓库根目录挂载到容器的/opt/jfs,在容器内执行make libjfs.so && cd juicefs && python3 -m build -w

编译完成后,Python SDK 同样位于juicefs/sdk/python/dist目录。

注意:由于第 2 点,Docker 路径下 whl 文件名与文档示例juicefs-1.3.0-py3-none-any.whl可能不一致——VERSION会被改写为 pkg/version/version.go 中的版本号(本仓库当前 checkout 为 1.5.0)加上 UTC 构建时间戳,例如形如juicefs-1.5.0.YYYYMMDDHHMM-py3-none-any.whl。以dist目录实际生成的文件名为准。

确认 whl 包已生成

无论走哪条路径,检查sdk/python/dist目录:

ls sdk/python/dist

目录中应出现juicefs-*.whl文件(直接编译为juicefs-1.3.0-py3-none-any.whl,Docker 编译带版本与时间戳,见上节说明)。这就是可以在目标机器上分发的安装包。

安装并验证 whl 可用

把编译好的 whl 文件拷到目标机器,用pip安装:

pip install juicefs-1.3.0-py3-none-any.whl

(文件名以你实际生成的为准。)安装后先确认包能被导入:

import juicefs help(juicefs.Client)

help()dir(juicefs.Client)能正常输出类和成员列表,说明 whl 安装成功。

进一步验证需要访问一个真实的 JuiceFS 文件系统。这里有一个文档明确给出的限制:Python SDK 目前不支持 format 文件系统,所以你必须已经有一个创建好的 JuiceFS 文件系统。文档示例假设已存在名为myfs的文件系统,元数据引擎地址为redis://192.168.1.8/0(这是文档示例值,请替换为你自己的文件系统名和元数据引擎 URL):

from juicefs import Client # Create JuiceFS client jfs = Client(name='', meta='redis://192.168.1.8/0') # List files in a directory jfs.listdir('/')

listdir('/')能返回目录中的文件列表,说明 whl 包可以正常使用。如果你的项目用fsspec接口(例如对接 Ray 等框架),可以另装fsspec并通过juicefs.spec.JuiceFS使用,属于可选用法,不影响 whl 本身的验证。

遇到 sed invalid command code 报错时如何处理

如果编译过程中出现类似下面的报错:

sed: 1: "juicefs/setup.py": invalid command code j

文档给出的处理方式是:尝试把 Makefile 中juicefs目标里的sed相关命令注释掉。副作用是setup.pyVERSIONBUILD_INFO不会被改写,包版本将保持 setup.py 中的默认值(setup.py 中已注释说明这两行“在 Make 过程中会被替换为实际版本号”)。注释掉 sed 后重新执行make juicefs即可继续编译。

限制

  • SDK 不支持格式化(format)文件系统,使用前必须已有创建好的 JuiceFS 文件系统,Client的第一个参数是文件系统名,meta参数是元数据引擎 URL。
  • whl 包名中的版本号取决于构建路径与构建时的版本文件,直接编译与 Docker 编译可能不同(见“确认 whl 包已生成”一节),不要假设固定文件名。
  • 更完整的 SDK 用法说明(fsspec 集成、Ray 等)可参考 Python SDK 文档,构建细节可对照 sdk/python/Makefile 与 sdk/python/Dockerfile.builder。

【免费下载链接】juicefsJuiceFS is a distributed POSIX file system built on top of Redis and S3.项目地址: https://gitcode.com/GitHub_Trending/ju/juicefs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 16:53:08

多项式回归实战指南:从PolynomialFeatures到过拟合规避

1. 从线性到曲线的第一步:为什么需要多项式回归很多人在用 sklearn 做完线性回归之后会有一个共同的感觉:明明训练集和测试集的分都还可以,但把拟合结果画出来一看,总觉得哪里不对劲。最常见的情况是,数据明显呈弯曲趋…

作者头像 李华
网站建设 2026/9/15 16:53:07

Loop 快捷键冲突排查指南:从定位、改绑到长期维护的完整清单

Loop 快捷键冲突排查指南:从定位、改绑到长期维护的完整清单 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 用 Loop 做 Mac 窗口管理时,快捷键按了没反应、触发了不相干的窗口动…

作者头像 李华
网站建设 2026/9/15 16:53:05

基于React的通用视频播放器插件设计:HLS流接入与工程实践

1. 项目背景与整体方案设计做前端的这么多年,我一直对视频播放这块又爱又恨。爱的是它带来的交互感和信息密度,恨的是兼容性、流协议、播放体验这些坑,随便踩一个都能让人排查半天。这次要说的项目,是我在自己维护的前端工程体系里…

作者头像 李华
网站建设 2026/9/15 16:51:49

Arm C2集群与AI原生GPU深度解析:AI推理性能提升70%背后的架构演进

Arm这次官宣,朋友圈直接炸了。全新C2 CPU集群,AI性能暴增70%,紧跟其后还有一款号称“AI原生”的GPU——组合拳一出,几乎所有做服务器、做边缘AI、做端侧推理的群都在刷屏。说实话,这两年Arm在服务器市场已经不再是“能…

作者头像 李华