Skip to main content

mfusepy

Python Version PyPI version Downloads Changelog License Build Status Discord Telegram

mfusepy is a Python module that provides a simple interface to FUSE and macFUSE. It's just one file and is implemented using ctypes to use libfuse.

Installation

Via PyPI:

pip install mfusepy

You also need to install the fuse (2) or fuse3 package on your system.

Versioning

This version tries to follow Semantic Versioning. If you depend on this project, you should fix the major version, or else you risk your project breaking on a newer version release! E.g., in your pyproject.toml:

dependencies = ["mfusepy ~= 1.1",]

If you have tested with multiple major versions and they are known to work, you can relax the constraint for maximum compatibility:

dependencies = ["mfusepy >= 1.1, < 3.0",]

About this fork

This is a fork of fusepy because it did not see any development for over 6 years. Refuse was an attempt to fork fusepy, but it has not seen any development for over 4 years. Among many metadata changes, it contains two bugfixes to the high-level API, which I have redone in this fork. See also the discussion in this issue. I intend to maintain this fork as long as I maintain ratarmount, which is now over 5 years old.

The main motivations for the fork are:

  • FUSE 3 support. Based on the libfuse changelog, the amount of breaking changes should be fairly small. It should be possible to simply update these ten or so changed structs and functions in the existing fusepy.
  • Translation layer performance. In benchmarks for a simple find call that lists all files, some callbacks such as readdir turned out to be significantly limited by converting Python dictionaries to ctype structs. The idea would be to expose the ctype structs to the fusepy caller.
    • Much of the performance was lost trying to populate the stat struct even though only the mode and inode member are used by the kernel FUSE API.

The prefix m in the name stands for anything you want it to: "multi" because multiple libfuse versions are supported, "modded", "modern", or "Maximilian".

Comparison with other libraries

High-level interface support (path-based)

Project License Dependants Notes
fusepy ISC 63 The most popular Python-bindings, but unfortunately unmaintained for 6+ years.
python-fuse LGPL 12 Written directly in C interfacing with fuse.h and exposing it via Python.h. Only supports libfuse2, not libfuse3.
refuse ISC 3 Dead fork of fusepy with many other dead forks: [1] [2]
fusepyng ISC 0 Dead fork of fusepy. GitHub repo has been force-pushed as a statement. Fork here.
userspacefs GPL3 (why not ISC?) 1 Fork of fusepyng/fusepy. Gated behind a self-hosted solution with no possibility to open issues or pull requests.
fusepy3 ISC Not on PyPI Fork of fusepy for the fox-it/dissect ecosystem to add libfuse3 support. Seems to drop libfuse2 support and does not appear to work around the ABI incompatibilities between libfuse3 minor versions. Last updated 1.5 years ago. Looks like publish-and-forget, or it may simply have no bugs.

Low-level interface support (inode/int-based)

All these libraries only wrap the low-level libfuse interface, which works with inodes instead of paths, and therefore are not (easily) usable for my use case. In the end, there is mostly only some path-to-hash table in the high-level libfuse API, but it is cumbersome to implement and performance-critical.

Project License Dependants Notes
pyfuse3 LGPL 9 ReadMe contains: "Warning - no longer developed!".
llfuse LGPL 2 ReadMe contains: "Warning - no longer developed!".
arvados-llfuse LGPL 1 Fork of llfuse, but less up to date?
aliyundrive-fuse MIT 0 Alibaba Cloud Disk FUSE disk mounting. "This repository has been archived by the owner on Mar 28, 2023". Documentation is only in Chinese. Read-only support. Multiple fizzled-out forks: pikpak-fuse, alist-fuse

Examples

See some examples of how you can use mfusepy:

Example Description
memory A simple memory filesystem
loopback A loopback filesystem
context Sample usage of fuse_get_context()
sftp A simple SFTP filesystem (requires paramiko)

Platforms

mfusepy requires FUSE 2.6 (or later) and runs on:

  • Linux (i386, x86_64, PPC, arm64, MIPS)
  • macOS (Apple Silicon, Intel)
  • FreeBSD (i386, amd64)
  • NetBSD (amd64)
  • OpenBSD (amd64)

While FUSE is (at least in the Unix world) a Linux kernel feature, several user space libraries exist for easy access. libfuse acts as the reference implementation.

Known Dependents

Metadata

Release files for mfusepy 3.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mfusepy 3.1.1
File Size Uploaded
mfusepy-3.1.1.tar.gz 34.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mfusepy 3.1.1
File Interpreter ABI Platform
mfusepy-3.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 62.8 kB

Release files / mfusepy-3.1.1.tar.gz

Download URL mfusepy-3.1.1.tar.gz
Size 34.5 kB
Tags Source
SHA-256 checksum
How to use checksums
338ece54513d7d1a5e9492837679a0c7432ecf96a03490a2683a1ce1d19570e1
BLAKE2b-256 checksum
How to use checksums
9147746287c8962274f73ee25edb3840d80899464bfffbe2c435424c2d60a071
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / mfusepy-3.1.1-py3-none-any.whl

Download URL mfusepy-3.1.1-py3-none-any.whl
Size 28.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
69fb70cfc7f7cce595e6ff586f8451d8298f01f18286a157f24f564b24ec5a37
BLAKE2b-256 checksum
How to use checksums
c5d556bc9326bf75f7ea0f4fe1178f5c9f20d1a1e15e288ecf66088513538ccd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

3.1.1 This release

2 release files

3.1.0

2 release files

3.0.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page