Skip to main content

High-performance parallel filesystem walker

Project description

python-pwalk

PyPI Downloads License Python Version Build Status

A high-performance toolkit for filesystem analysis and reporting — optimized for petabyte-scale filesystems and HPC environments.

Generate comprehensive filesystem metadata reports 5-10x faster than traditional tools, with true multi-threading, intelligent buffering, and automatic zstd compression achieving 23x size reduction. Perfect for system administrators, data scientists, and HPC users working with millions or billions of files.

Why python-pwalk?

Traditional filesystem traversal tools struggle with modern storage systems containing billions of files. python-pwalk solves this with a battle-tested approach combining Python's ease of use with C's raw performance.

Key Features

  • 🚀 Extreme Performance: 8,000-30,000 files/second — traverse 50 million files in ~41 minutes
  • 🔄 True Parallelism: Multi-threaded C implementation using up to 32 threads
  • 🗜️ 23x Compression: Automatic zstd compression reduces 100 GB CSV to 4 GB
  • 📦 Zero Dependencies: No PyArrow, no numpy — just Python + C
  • 🔌 Drop-in Replacement: 100% compatible with os.walk() API
  • 💾 Memory Efficient: Thread-local buffers with automatic spillover for billions of files
  • 🎯 HPC Ready: SLURM-aware, .snapshot filtering, cross-filesystem detection
  • 🦆 DuckDB Native: Output .csv.zst files readable directly by DuckDB
  • 🛡️ Production Tested: Based on John Dey's pwalk used in HPC environments worldwide

Perfect For

  • System Administrators: Audit multi-petabyte filesystems in minutes
  • Data Scientists: Analyze file distributions across massive datasets
  • HPC Users: Track storage usage in supercomputing environments
  • Storage Teams: Generate reports for NetApp, Lustre, GPFS filesystems
  • Compliance: Create auditable records of filesystem contents

Installation

pip install pwalk

That's it! Pre-compiled binary wheels are available for:

  • Linux: x86_64 (manylinux2014)
  • CPython: 3.10, 3.11, 3.12, 3.13, 3.14
  • CPython (No GIL): 3.13t, 3.14t (experimental free-threading builds)
  • PyPy: 3.10, 3.11 (fast JIT-compiled Python alternative)

No system dependencies needed — wheels include everything pre-compiled!

For free-threading Python:

python3.13t -m pip install pwalk
PYTHON_GIL=0 python3.13t your_script.py

For PyPy:

pypy3 -m pip install pwalk

Quick Start

30-Second Example

from pwalk import walk, report

# 1. Drop-in replacement for os.walk() — 100% compatible API
for dirpath, dirnames, filenames in walk('/data'):
    print(f"{dirpath}: {len(filenames)} files")

# 2. Generate compressed filesystem report (5-10x faster with multi-threading!)
output, errors = report('/data', compress='zstd')
# Creates scan.csv.zst - 23x smaller than plain CSV!

# 3. Analyze with DuckDB
import duckdb
df = duckdb.connect().execute(f"SELECT * FROM '{output}'").fetchdf()
print(df.head())

Note on Performance: The walk() function uses os.walk() under the hood (single-threaded) for maximum compatibility across Python versions. For 5-10x faster performance, use report() which leverages our multi-threaded C implementation. In Python 3.13+ with free-threading (no-GIL mode), walk() will automatically use parallel traversal for massive speedups!

Basic Usage

from pwalk import walk

# 100% compatible with os.walk() API
for dirpath, dirnames, filenames in walk('/data'):
    print(f"Directory: {dirpath}")
    print(f"  Subdirectories: {len(dirnames)}")
    print(f"  Files: {len(filenames)}")

Full API Compatibility

from pwalk import walk

# All os.walk() parameters supported
for dirpath, dirnames, filenames in walk(
    '/data',
    topdown=True,           # Process parents before children
    onerror=handle_error,   # Error callback
    followlinks=False       # Don't follow symlinks
):
    # Modify dirnames in-place to prune traversal
    dirnames[:] = [d for d in dirnames if not d.startswith('.')]

Advanced: Thread Control

from pwalk import walk

# Explicit thread count (default: cpu_count() or SLURM_CPUS_ON_NODE)
for dirpath, dirnames, filenames in walk('/data', max_threads=16):
    process_directory(dirpath, filenames)

# Traverse snapshots (disabled by default)
for dirpath, dirnames, filenames in walk('/data', ignore_snapshots=False):
    ...

Filesystem Metadata Reports

CSV Output with Zstd Compression (Default)

from pwalk import report

# Generate compressed CSV (8-10x smaller, DuckDB compatible)
output, errors = report(
    '/data',
    output='scan.csv',
    compress='zstd'  # or 'gzip', 'auto', 'none'
)

print(f"Report saved to: {output}")
print(f"Inaccessible directories: {len(errors)}")

CSV Format (100% compatible with John Dey's pwalk):

inode,parent-inode,directory-depth,"filename","fileExtension",UID,GID,st_size,st_dev,st_blocks,st_nlink,"st_mode",st_atime,st_mtime,st_ctime,pw_fcount,pw_dirsum

Compression Options:

  • compress='auto': Use zstd if available, else uncompressed (default)
  • compress='zstd': Force zstd compression (8-10x, fast)
  • compress='gzip': Use gzip compression (6-7x, slower but universal)
  • compress='none': No compression

DuckDB Analysis Workflow

# 1. Generate compressed CSV report
from pwalk import report
output, errors = report('/data', output='scan.csv', compress='zstd')

# 2. DuckDB reads .csv.zst natively!
import duckdb
con = duckdb.connect('fs_analysis.db')
con.execute("CREATE TABLE fs AS SELECT * FROM 'scan.csv.zst'")

# 3. Answer questions like "Who used the last 10TB?"
result = con.execute("""
    SELECT
        uid,
        count(*) as file_count,
        sum(st_size) / (1024*1024*1024*1024) as size_tb
    FROM fs
    WHERE st_ctime > unixepoch(now() - INTERVAL 7 DAY)
    GROUP BY uid
    ORDER BY size_tb DESC
    LIMIT 10
""").fetchdf()
print(result)

# 4. Optional: Convert to Parquet for long-term storage
con.execute("""
    COPY (SELECT * FROM 'scan.csv.zst')
    TO 'scan.parquet' (FORMAT PARQUET, COMPRESSION SNAPPY)
""")

Filesystem Repair (Root Only)

from pwalk import repair

# Dry-run to preview changes
repair(
    '/shared',
    dry_run=True,
    change_gids=[1234, 5678],      # Treat these GIDs like private groups
    force_group_writable=True,      # Ensure group read+write+execute
    exclude=['/shared/archive']     # Skip specific paths
)

# Apply changes
repair('/shared', dry_run=False, force_group_writable=True)

Real-World Use Cases

1. Answer Critical Storage Questions Fast

from pwalk import report
import duckdb

# Generate comprehensive filesystem metadata
report('/data', compress='zstd')  # Done in minutes, not hours!

# Who used the last 10 TB this week?
con = duckdb.connect()
result = con.execute("""
    SELECT UID, COUNT(*) as files, SUM(st_size)/1e12 as TB
    FROM 'scan.csv.zst'
    WHERE st_ctime > unixepoch(now() - INTERVAL 7 DAY)
    GROUP BY UID ORDER BY TB DESC LIMIT 10
""").fetchdf()

2. Find Storage Hogs and Opportunities

# Find directories with >1M files (performance issues!)
huge_dirs = con.execute("""
    SELECT "filename", pw_fcount, pw_dirsum/1e9 as GB
    FROM 'scan.csv.zst'
    WHERE pw_fcount > 1000000
    ORDER BY pw_fcount DESC
""").fetchdf()

# Find ancient files (cleanup candidates)
old_files = con.execute("""
    SELECT "filename", st_size, datetime(st_mtime, 'unixepoch')
    FROM 'scan.csv.zst'
    WHERE st_mtime < unixepoch(now() - INTERVAL 2 YEAR)
    ORDER BY st_size DESC LIMIT 100
""").fetchdf()

3. Monitor Growth Over Time

# Weekly snapshots
import schedule

def weekly_snapshot():
    timestamp = time.strftime('%Y%m%d')
    report('/data', output=f'snapshot_{timestamp}.csv.zst')

schedule.every().sunday.at("02:00").do(weekly_snapshot)

Performance

Multi-Threading Support Matrix

Python Version walk() report()
CPython 3.10
CPython 3.11
CPython 3.12
CPython 3.13
CPython 3.13t (No GIL)
CPython 3.14
CPython 3.14t (No GIL)
PyPy 3.10
PyPy 3.11

Legend: ✅ = Multi-threaded (5-10x faster) | ❌ = Single-threaded

Key Takeaway: Use report() for maximum performance on all Python versions!

Current Performance (Python 3.10-3.14)

walk() function: Uses os.walk() internally (single-threaded) for 100% compatibility

  • Same speed as os.walk() — perfect drop-in replacement
  • No threading overhead, works everywhere

report() function: Multi-threaded C implementation (5-10x faster!)

  • Speed: 8,000-30,000 stat operations per second
  • Example: 50 million files in ~41 minutes at 20K stats/sec
  • Parallelism: Up to 32 threads (releases GIL, works on all Python implementations)
  • Scaling: Performance depends on storage system, host CPU, and file layout
  • Compression: Zstd reduces CSV size by 23x with minimal overhead
  • PyPy Compatible: Multi-threading works on PyPy through C extension (cpyext)

Future Performance (Python 3.13+ Free-Threading)

What's Changing? Python 3.13 introduced optional "free-threading" mode (also called "no-GIL mode").

The Global Interpreter Lock (GIL) Explained: For decades, Python had a "global lock" that prevented multiple threads from running Python code simultaneously. This meant that even with multiple CPU cores, only one thread could execute Python code at a time. Python 3.13+ can optionally remove this lock, allowing true parallel execution.

What This Means for pwalk:

  • CPython 3.13+ with free-threading: walk() will automatically use parallel traversal for 5-10x speedup
  • CPython 3.10-3.12: walk() uses os.walk() (single-threaded)
  • PyPy (all versions): walk() uses os.walk() (single-threaded, but JIT-compiled Python is faster)
  • report() is always fast: Multi-threaded C code releases GIL - works on all implementations!

How to Get Free-Threading Python (Python 3.13+):

Free-threading Python builds are now available! Here's how to get them:

Option 1: Official Python.org Installers (Easiest)

# Download from python.org
# Look for "Free-threaded" builds (separate downloads)
# https://www.python.org/downloads/

# On Linux/macOS, the free-threaded interpreter has a 't' suffix
python3.13t --version  # Should show "Python 3.13.x (free-threaded)"

Option 2: Build from Source (Linux/macOS)

# Clone Python source
git clone https://github.com/python/cpython.git
cd cpython
git checkout v3.13.0  # or latest 3.13.x tag

# Configure with free-threading
./configure --disable-gil
make -j$(nproc)
sudo make install

# Verify
python3.13 --version
python3.13 -c "import sys; print(f'GIL disabled: {not sys._is_gil_enabled()}')"

Option 3: Docker/Conda (Recommended for Testing)

# Using official Python Docker image
docker run -it python:3.13-slim python3 -c "import sys; print(sys._is_gil_enabled())"

# Conda (check for free-threading builds)
conda install python=3.13

Option 4: pyenv (Developers)

# Install pyenv if not already installed
curl https://pyenv.run | bash

# Install free-threaded Python 3.13
pyenv install 3.13.0t  # 't' suffix for free-threaded build
pyenv local 3.13.0t

# Verify
python --version
python -c "import sys; print(f'GIL: {sys._is_gil_enabled()}')"

Using Free-Threading with pwalk:

# Install pwalk
python3.13t -m pip install pwalk

# IMPORTANT: Set PYTHON_GIL=0 to keep GIL disabled
export PYTHON_GIL=0

# Run your script
python3.13t your_script.py

# Or inline:
PYTHON_GIL=0 python3.13t your_script.py

# Verify it's working
PYTHON_GIL=0 python3.13t -c "import sys; print(f'Free-threading: {not sys._is_gil_enabled()}')"

Important: By default, Python 3.13t will enable the GIL when loading C extensions that haven't declared GIL-free compatibility. Use PYTHON_GIL=0 or -Xgil=0 to keep it disabled.

Note: As of 2025, free-threading is still experimental. Some packages may not be compatible yet. For production use today, stick with report() which is always multi-threaded!

Technical Architecture

  • Single Optimized C Extension: _pwalk_core — 320 lines of highly optimized C
  • Thread-Local Buffers: 512KB per thread, zero lock contention during traversal
  • Multithreaded Traversal: Up to 32 parallel threads using John Dey's proven algorithm
  • Streaming Compression: Zstd level 1 for 23x compression at 200-400 MB/s
  • SLURM Integration: Auto-detects SLURM_CPUS_ON_NODE for HPC environments
  • Zero Dependencies: No external Python packages — ships ready to run

Why No Dependencies Matters

Unlike other tools that require PyArrow (~50 MB), numpy, pandas, etc., pwalk installs in seconds with zero dependencies. This means:

  • ✅ Instant installation on air-gapped HPC systems
  • ✅ No version conflicts with existing packages
  • ✅ Minimal attack surface for security-conscious environments
  • ✅ Works everywhere Python 3.10+ works

Contributing

Contributions welcome! Based on the rock-solid filesystem-reporting-tools by John Dey.

License

GPL v2 — Same as John Dey's original pwalk implementation.

Links


Built with ❤️ for system administrators and HPC users worldwide. Based on John Dey's battle-tested pwalk implementation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pwalk-0.1.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (354.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pwalk-0.1.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (27.2 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pwalk-0.1.5-cp314-cp314t-manylinux_2_34_x86_64.whl (370.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.34+ x86-64

pwalk-0.1.5-cp313-cp313t-manylinux_2_34_x86_64.whl (370.6 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.34+ x86-64

pwalk-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (367.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pwalk-0.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (38.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pwalk-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (367.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pwalk-0.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (39.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pwalk-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (367.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pwalk-0.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (38.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

File details

Details for the file pwalk-0.1.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6fbf2eca62dcc4d93c77992d99b05562db5b2751d05d0cda4375a9c55bb2ed7d
MD5 2806f6bee2e7093e297283380e4da15c
BLAKE2b-256 0fb41c622406db13ccf34ad7d7bb3a62f87d1c3479fcdc041f2f334a0a0ed7b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pwalk-0.1.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 e793568ba0b39290568f93fe083868a301add7a94932cfc2678f7218013030f3
MD5 92a1d1990641cbd69479fcc37efc11a0
BLAKE2b-256 425de22c22e019f5b9b1cfd51b5db279c1b48b5559d39377afe4c1401b2381b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pwalk-0.1.5-cp314-cp314t-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-cp314-cp314t-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 eb1b4cc1d77ef484fa7adb1cda8112fdd59af6b4da640ac5a18ad1834a801339
MD5 6c2b80cb09d0633063913ea793b50a71
BLAKE2b-256 5694bbc927c487f4aba04f9db33866e46c899cee5b17d7146fc7b2f36409b549

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-cp314-cp314t-manylinux_2_34_x86_64.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pwalk-0.1.5-cp313-cp313t-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-cp313-cp313t-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f06b64eb36329d3eaf08f4a95af539dca465a8f141823e6d48e454f229da181d
MD5 cfea22505c8f32485b1c8706e1573f7a
BLAKE2b-256 a2931556c0c3c8de19ffa6f8d1db58f03c203783389767e1f4d4e369f468fb5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-cp313-cp313t-manylinux_2_34_x86_64.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pwalk-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1bd393eda052e03512520dee67ae798326f78eb1cd462ada8707c4db6e46bec2
MD5 5fe88c977bf655afe245b04882a32720
BLAKE2b-256 1843010ed7fcec64bb4d6df97841bb24bf159cb83247f209423a5569819c9a47

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pwalk-0.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 798e64e4fe1bfdbce5e8c360af5175f18c8db6a4594206f154f66a204c4caa71
MD5 f76a9d865fcec825e8635de87aae788e
BLAKE2b-256 0ba82bbaf1fe2e90efe5ba25130b2eda946a036b1db2fcb10237fdf9d43d5a58

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pwalk-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4e2c30e0ba4bd247edb79b677377b39a32521b9696583cef16d4b304b10fb958
MD5 54f2bc077ebb3b293900345c1929cbba
BLAKE2b-256 0eb0d9b36f629cca88ed7817843a64e6978c32d8143ccf82230114259b605e8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pwalk-0.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ea0c78a86838e3cd04f6967009f93a270dd2f93f7ff364e457b43d7488bf9868
MD5 ac7e13b1cdbd226b16f8cf4d4f96cca9
BLAKE2b-256 451ec5fe823a8286c606405bd0f1cd4b6834949347620e2b905a9dd26e7f6191

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pwalk-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3fecb540fcb07ac190a34e44231a71419c869e919a54fab95add133b52f2564c
MD5 3a30dd33172dfd513e90bd04383f2342
BLAKE2b-256 b33033e7369d18f07ecb1a795bb6143778c94edee4f1ea08638684eaf8a77d3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pwalk-0.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pwalk-0.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 da6e6d98e6c0757d2ca8d3b1cd02c40ee468f614ccbff8f99cc04862ffd20ecf
MD5 0d99db0e725e3bf8aa4fe9a3c74305aa
BLAKE2b-256 f3bde6448b73ddcbc5bc999a9bbbb3fc8a158eba99c9ef8aad6805887805b2b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pwalk-0.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish-pypi.yml on dirkpetersen/python-pwalk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page