资讯动态

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

发布时间:2026/9/15 16:55:19 来源:尧图企业网站定制
如何从源码编译 JuiceFS Python SDK 得到可用的 whl 包【免费下载链接】juicefsJuiceFS is a distributed POSIX file system built on top of Redis and S3.项目地址: https://gitcode.com/GitHub_Trending/ju/juicefsJuiceFS Python SDK 适用于无法使用 FUSE 挂载的容器化或虚拟化环境。如果你的目标是在这类环境中通过 Python 访问 JuiceFS 文件系统就需要先从源码编译出一个可安装的 whl 包然后在目标机器上用pip安装并验证它可用。编译有两条路径直接编译当前环境需要go1.20、make、python3和Docker 容器编译需要Docker、make、go1.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.somacOS 上是libjfs.dylibWindows 上是libjfs.dll和头文件libjfs.h会放在sdk/python/juicefs/juicefs目录。可以确认该目录下出现了libjfs.so或对应平台的后缀再进入下一步。第 2 步编译 Python SDKcd 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 构建可以用项目自带的构建镜像编译前提是系统已安装Docker、make和go1.20。第 1 步构建 Docker 镜像# For arm64 make arm-builder # For amd64 make builder两个目标分别基于 Dockerfile.builder.arm 和 Dockerfile.builder 构建镜像名都是sdkbuilder按机器架构二选一即可。第 2 步执行 make juicefsmake juicefs执行前需要知道这个目标会做三件事见 sdk/python/Makefile用sudo rm -rf juicefs.egg-info删除本地的juicefs.egg-info缓存目录用sed把 setup.py 的VERSION和BUILD_INFO改写为构建时的版本信息启动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.whlDocker 编译带版本与时间戳见上节说明。这就是可以在目标机器上分发的安装包。安装并验证 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这是文档示例值请替换为你自己的文件系统名和元数据引擎 URLfrom juicefs import Client # Create JuiceFS client jfs Client(name, metaredis://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.py的VERSION和BUILD_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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价