partyfuse: prefer mfusepy (fuse.py fork);

now supports both fuse2 and fuse3

fallback on fuse.py (fuse2-only) if mfusepy unavailable

fuse3 is 20% faster on large files,
fuse2 == fuse3 on small files

motivated by nixos dropping fuse2 in NixOS/nixpkgs#522340
This commit is contained in:
ed
2026-05-21 23:31:57 +00:00
parent 1f4246c6bb
commit b2401ff15a
10 changed files with 41 additions and 27 deletions
+2 -2
View File
@@ -26,12 +26,12 @@ and consider using [../docs/rclone.md](../docs/rclone.md) instead; usually a bit
## to run this on windows:
* install [winfsp](https://github.com/billziss-gh/winfsp/releases/latest) and [python 3](https://www.python.org/downloads/)
* [x] add python 3.x to PATH (it asks during install)
* `python -m pip install --user fusepy` (or grab a copy of `fuse.py` from the `connect` page on your copyparty, and keep it in the same folder)
* `python -m pip install --user mfusepy` (or grab a copy of `mfusepy.py` from the `connect` page on your copyparty, and keep it in the same folder)
* `python ./partyfuse.py n: http://192.168.1.69:3923/`
10% faster in [msys2](https://www.msys2.org/), 700% faster if debug prints are enabled:
* `pacman -S mingw64/mingw-w64-x86_64-python{,-pip}`
* `/mingw64/bin/python3 -m pip install --user fusepy`
* `/mingw64/bin/python3 -m pip install --user mfusepy`
* `/mingw64/bin/python3 ./partyfuse.py [...]`
you could replace winfsp with [dokan](https://github.com/dokan-dev/dokany/releases/latest), let me know if you [figure out how](https://github.com/dokan-dev/dokany/wiki/FUSE)
+14 -8
View File
@@ -21,7 +21,7 @@ usage:
python partyfuse.py http://192.168.1.69:3923/ ./music
dependencies:
python3 -m pip install --user fusepy # or grab it from the connect page
python3 -m pip install --user mfusepy # or grab it from the connect page
+ on Linux: sudo apk add fuse
+ on Macos: https://osxfuse.github.io/
+ on Windows: https://github.com/billziss-gh/winfsp/releases/latest
@@ -92,8 +92,13 @@ is_dbg = False
try:
from fuse import FUSE, FuseOSError, Operations
from mfusepy import FUSE, FuseOSError, Operations
except:
try:
from fuse import FUSE, FuseOSError, Operations
except:
FUSE = None
if WINDOWS:
libfuse = "install https://github.com/billziss-gh/winfsp/releases/latest"
elif MACOS:
@@ -102,12 +107,13 @@ except:
libfuse = "apt install libfuse2\n modprobe fuse"
m = """\033[33m
could not import fuse; these may help:
{} -m pip install --user fusepy
could not import mfusepy; these may help:
{} -m pip install --user mfusepy
{}
\033[0m"""
print(m.format(sys.executable, libfuse))
raise
if not FUSE:
print(m.format(sys.executable, libfuse))
raise
def termsafe(txt):
@@ -143,10 +149,10 @@ def fancy_log(fmt, *a):
def register_wtf8():
def wtf8_enc(text):
def wtf8_enc(text, errors=""):
return str(text).encode("utf-8", "surrogateescape"), len(text)
def wtf8_dec(binary):
def wtf8_dec(binary, errors=""):
return bytes(binary).decode("utf-8", "surrogateescape"), len(binary)
def wtf8_search(encoding_name):