Skip to main content

Python SDK

The JuiceFS Community Edition introduced the Python SDK in v1.3.0, making it suitable for containerized or virtualized environments where FUSE mounting is not available. The Python SDK also implements the fsspec interface, enabling easy integration with frameworks such as Ray.

Compilation

You can compile the Python SDK directly in your current working environment or use a Docker container. Both methods require you to first clone the repository and navigate to the SDK directory.

# Clone JuiceFS repository
git clone https://github.com/juicedata/juicefs.git
# Enter JuiceFS directory
cd juicefs/sdk/python

Direct Compilation

Direct compilation requires go1.20+ and python3 environments.

Step 1: Compile libjfs.so

go build -buildmode c-shared -ldflags="-s -w" -o juicefs/juicefs/libjfs.so ../java/libjfs

The compiled libjfs.so and libjfs.h files will be in the sdk/python/juicefs/juicefs directory.

Step 2: Compile Python SDK

cd juicefs && python3 -m build -w

The compiled Python SDK will be in the juicefs/sdk/python/dist directory, named juicefs-1.3.0-py3-none-any.whl.

Docker Compilation

Using Docker containers for compilation requires Docker, make, and go1.20+ installed on your system.

Step 1: Build Docker image

# For arm64
make arm-builder

# For amd64
make builder

Step 2: Compile Python SDK

make juicefs

The compiled Python SDK will be in the juicefs/sdk/python/dist directory, named juicefs-1.3.0-py3-none-any.whl.

Compilation Error Handling

If you encounter an error like sed: 1: "juicefs/setup.py": invalid command code j during compilation, you can try commenting out the sed-related commands in the Makefile.

Installation and Usage

Installing the SDK

Copy the compiled juicefs-1.3.0-py3-none-any.whl file to the target machine and install it using pip:

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

Preparing the File System

tip

JuiceFS Python SDK currently does not support formatting a file system, so please ensure you have already created a JuiceFS file system before use.

Let's assume there is a pre-created file system named myfs with metadata engine URL redis://192.168.1.8/0.

Using the Client

The Client class implementation is similar to Python's io module.

You can instantiate a JuiceFS client with the following code, where the name parameter is the file system name and the meta parameter is the URL of the metadata engine. The name parameter must exist but can be an empty string or None.

from juicefs import Client

# Create JuiceFS client
jfs = Client(name='', meta='redis://192.168.1.8/0')

# List files in a directory
jfs.listdir('/')

Using fsspec

JuiceFS Python SDK also supports the fsspec interface to operate the JuiceFS file system.

# Install fsspec
pip install fsspec

Using fsspec is similar to using the Client class, but you need to specify jfs or juicefs as the file system type.

import fsspec
from juicefs.spec import JuiceFS

jfs = fsspec.filesystem('jfs', name='', meta='redis://192.168.1.8/0')

# List files in a directory
jfs.ls('/')

Getting Help Information

You can use the help() function to get help information for classes and methods.

import juicefs

help(juicefs.Client)

You can also use the dir() function to get a list of classes and methods.

import juicefs

dir(juicefs.Client)