minipy3
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, orbz2with extreme presets andBase85encoding 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)
| File | Size | Uploaded | |
|---|---|---|---|
| minipy3-1.2.0.tar.gz | 8.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|