Skip to main content

minipy3

PyPI version Downloads Python versions License GitHub stars

A utility to minimize and compress Python 3 code. It reduces script size by rewriting the Abstract Syntax Tree (AST), stripping unnecessary characters, and optionally applying native compression algorithms.

Features

  • Semicolon Insertion: Automatically places semicolons where needed.
  • Numeric Optimization: Large integers are converted into mathematical powers (e.g., 100000 -> 10**5).
  • Import Consolidation: Groups sequential import statements into a single line.
  • Docstring Truncation: Strips off white spaces, dedents, and minifies docstrings.
  • Advanced Compression: Optionally compresses code using lzma, zlib, gzip, or bz2 with extreme presets and Base85 encoding to maximize payload reduction.

Installation

You can install the package via pip or poetry:

pip install minipy3

Usage

Command Line Interface (CLI)

You can use the module directly from the terminal to compress entire directories or specific files.

usage: minipy3 [-h] [-o OUT] [--no-compress] [--unparse] [--no-suffix] input

positional arguments:
  input              Input files rglob

options:
  -h, --help         show this help message and exit
  -o OUT, --out OUT  Output files rglob
  --no-compress      Don't use compression algorithms (lzma, zlib, gzip or bz2)
  --unparse          Return from compressed to standard view
  --no-suffix        Add suffix to file name (max for --unparse else min)

Example:

minipy3 --no-suffix venv\**\*.py

This will compress all .py files in the venv folder and its subdirectories. Note: --no-suffix overwrites the source files. If omitted, .min.py (or .max.py with --unparse) suffixes are appended.

Python API

You can also integrate minipy3 directly into your Python projects.

from minipy3 import minimize, AddSemicolon

def minimize(raw_code: str | bytes,
             compress: bool = True,
             compress_required: bool = False) -> str:
    """
    Minimizes the passed code. 
    Applies the best compression algorithm if it results in a smaller payload.
    """
    ...

AddSemicolon Utility

An internal utility to format code with semicolons instead of newlines.

import ast
from minipy3 import AddSemicolon

class Minimize(AddSemicolon, ignore={'Import'}):
    """Class based on ast._Unparse for code compression (see ast.unparse)"""
    ...

def add_semicolons(raw_code: str | bytes) -> str: 
    return AddSemicolon().visit(ast.parse(raw_code))

Examples

Example 1: Basic Minimization

# Before
from __future__ import annotations
import ast
import functools

class AddSemicolon(ast._Unparser):
    """Adds a semicolon where needed (see also ast.unparse)"""
    __slots__ = ()

# After minimization
from __future__ import annotations;import ast,functools
class AddSemicolon(ast._Unparser):
 'Adds a semicolon where needed (see also ast.unparse)';__slots__=()

Example 2: Compressed Output (Using lzma)

# __init__.py (Use --no-compress to disable)
i=__import__;exec(i('lzma').decompress(i('base64').b85decode(b'T>t<81poj4|NsC0...00')))

License

This project is licensed under the MIT License. See the LICENSE file for details.

Release files for minipy3 1.2.0

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

Source distribution (sdist)

Source distribution for minipy3 1.2.0
File Size Uploaded
minipy3-1.2.0.tar.gz 8.4 kB Details

Built distribution (wheel)

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

Total release size: 18.3 kB

Release files / minipy3-1.2.0.tar.gz

Download URL minipy3-1.2.0.tar.gz
Size 8.4 kB
Tags Source
SHA-256 checksum
How to use checksums
852bd057065292404eca2eb1addab1e4a90927abcc387a1674406fe6be4ff5ad
BLAKE2b-256 checksum
How to use checksums
675d0338a38697a0a7e1cc829dee304cb1cf0dee4ea8071fdfefff7200e4b9ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.13.14 Linux/7.1.4-zen1

Release files / minipy3-1.2.0-py3-none-any.whl

Download URL minipy3-1.2.0-py3-none-any.whl
Size 9.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3afac294fb113c61a028e48e3dfbf2f2139509e037ad6ef8f860dde705b98805
BLAKE2b-256 checksum
How to use checksums
f2ce76337fea7db2ffde0b49fb988cc94ca191a2d13ba33be2da5ae6279b2376
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.13.14 Linux/7.1.4-zen1

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

1.0.0

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