Minimizes Python3 code
Project description
MiniPy3
Minimizes python3 code
Usage
CLI
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
python -m minipy3 --no-suffix venv***.py
Will compress all .py files in the venv folder and its subfolders.
--no-suffix means that source files will be overwritten otherwise suffix .min will be added when minimizing or .max when restoring (argument --unparse) (main.py -> main.min.py | main.max.py)
Python
from minipy3 import *
class Minimize(AddSemicolon, ignore={'Import'}):
"""Class based on ast._Unparse for code compression (see ast.unparse)"""
...
def minimize(raw_code: str | bytes,
compress: bool = True,
compress_required: bool = False) -> str:
"""
Minimizes the passed code with the help of the Minimizer class;
And if necessary or gives more compression, applies one of the compression algorithms: (lzma, zlib, gzip, bz2)
"""
...
AddSemicolon
An additional utility is the ability to add semicolons in the code (as in swift, dart and generally everywhere)
class AddSemicolon(ast._Unparser):
"""Adds a semicolon where needed (see add_semicolon_after)"""
__slots__ = ()
add_semicolon_after = {'Return', 'Delete', 'Assign', 'AugAssign', 'AnnAssign', 'Raise', 'Assert', 'Import',
'ImportFrom', 'Global', 'Nonlocal', 'Expr', 'Pass', 'Break', 'Continue'}
def and_add(self, func):
"""
Decorate visitor functions.
Designed for class extensibility.
"""
...
def __init_subclass__(cls, **kwargs):
"""
When inheriting a class,
the ignore argument will exclude the specified sequence from the add_semicolon_after sequence.
"""
ignore = kwargs.get('ignore', {*()})
cls.add_semicolon_after ^= ignore
def __init__(self, *args, **kwargs):
"""Applies the and_add decorator to visitor nodes specified by add_semicolon_after"""
...
def add_semicolons(raw_code: str | bytes) -> str: ...
Also happens:
- Large numbers turn into powers of numbers
- The sequence of imports is collected into one
- Dockstrings get cut off, strip('\n') and dedent happen
Examples:
# semicolon.py ->
from __future__ import annotations;import ast,functools
class AddSemicolon(ast._Unparser):
'Adds a semicolon where needed (see also ast.unparse)';__slots__=();add_semicolon_after={'Return','Delete','Assign','AugAssign','AnnAssign','Raise','Assert','Import','ImportFrom','Global','Nonlocal','Expr','Pass','Break','Continue'}
def and_add(self,func):
'Decorate visitor functions.\nDesigned for class extensibility.'
@functools.wraps(func)
def wrapper(*args,**kwargs):res=func(*args,**kwargs);self.write(';');return res
return wrapper
def __init_subclass__(cls,**kwargs):'When inheriting a class,\nthe ignore argument will exclude the specified sequence from the add_semicolon_after sequence.';ignore=kwargs.get('ignore',{*()});cls.add_semicolon_after^=ignore
def __init__(self,*args,**kwargs):
'Applies the and_add decorator to visitor nodes specified by add_semicolon_after';super().__init__(*args,**kwargs)
for name in self.add_semicolon_after:
name=f'visit_{name}'
if hasattr(self,name):setattr(self,name,self.and_add(getattr(self,name)))
def add_semicolons(raw_code):return AddSemicolon().visit(ast.parse(raw_code))
# __init__.py (--no-compress to disable such compression)
exec(__import__('lzma').decompress(b']\x00\x00\x80\x00\xff\xff\xff\xff\xff\xff\xff\xff\x003\x1c\x8a"o\xaaD6D\xa6P\x82\x88\x10?\x1d\xcb^4\x0fYJY"\xa1\xcdfk\xb9\x04Ns\xa5\x08\x13SFB\xfd\x95\x11IPF)\x86\xa8\xf4$OH\xad\xa4\xb4\xd0\x82RM\x00\x8e\xc8s\xe7\x9d_0.:\x0e\n&j\x10\x94\xe5&\xd3m\xab\x18\x14r}\x04C$\xe5\xf3\xa5\xae\x8a\x8f\xe4\x7f5!\xb3u\x84\x1f\xecL\xaadz\xbb\xf2\n\xaa#a\x0c\xe0\xe8p\x16\xab\x01\x8aQ\x9e\x8f\xbb\xbd\x9d\x04\xfaP\xc1\xf1\xc4\xea\x926\x1c@\xe2\x1co\xd9\xd3)\xcf\xb2\xee\x94\x12\xedL\xa9\x05\xe3\x07V\x1d\xdb\xe4\x19\x00\x06\xd8iq\x01#/\x98\xdbfMS\x19\xf4\x93\xd1\xc8\xeb\xf6=\rz\xf4\xdf`\xef\xbd\x01~S2\xf8e=`\x88\xef\xe8\x80\x84\xc4\x0b\xd2\xb2h1\xb4{\xc8s\xe9\x9a\xf8k?\xa3s\xb2\xe7\xcd%\xe1\xd0\x11g\x00\xad \x02\xaac\xb0\x0e\xbc\x15\xe4\xc9=3}A)\xe3|\x10~U\xe1\x9d7u\x12\xb6\xce\x81~\xe7DD3\x89D\xef\xa2V\xea\x05\xa4y\x12\x17\xf2Ra\xc9a\xcc\x07\x96b\xef\\\xef\xdcb\xde02\x9f@\xa9\x96o\x9cZ\xf2\xa3\xbb\x0c\xad\xf0\xae\xcf\x87\xf2\xd6\x10w\x053\xbf\xd2s\xdf\x8eR\xcb\x01\n~w\xc2!\x1a\x83\x05\x9cP\xealh\xb0\xb3\x1c\xe3F\x86\x1d\xd8\xa3?\'\x0c8\x00\xedB\xf5\x8f\rS\t\x1eR`R\xe5\r\xfb\x83\x02O\x16\xce\t\xd9\xe7\xb2"`\xf4H\xd4W\xfd\xad\xf4\xbc\xa2._\x7fVE\x7f&\xd4\x1f\t\x13\xdbB?s\xd4\x19\x7f\xd6\x15h8\x89c\x9c\xd1\x14n\xc1%4\x8ap\xf7\x8f\xa6\x17\x15\x88c\x8e\xaa\xd6=r\xad\x07JH(\x13\xa78\xe2\xd1v8\xd82m\xbe-\x0c\x9b+\xb6\x05%g\xdc\x98k\xf8fSLD\xa6\xc01\xa5G\x8f\x8c\x89HT\xe9\x98.\xe1\xe0Qk\xfbMm\xbf\x11&\x15\xdb\xd3T:\xe6>\xd6\x7f.\xb4;>uC\x02\xce\xf1\x1c\xeeRZp\x8eODs?|\x1b/\xb4R>\x8fW\xe0\xbc1\xd8\x86\xdb\xcc\n:C\xf9\xfb\xd4\x9d\xd5<\xfd\x9a\xb3\xc1\xa3\xfck\x01J\x1c\xfbX\xd8BXM=h8K\xd9\x99p\xb8D,\x95\xb6\x7fl\xc8\x89W\x80\x9e\xb4\xc2\xc8\x00`\x92\xcc$6\x8f\xc9,\xa3-\xbbg9\x15\xfd\xdbY\xf7\x9c\x02\x8e\xf2\x1bu&a\xfa\xa7V>\x1b\x8dO\xb7\x17\x9e^\xa8+\xa2\xdc\xf6\x11\x94Q\n\x02mw\x0ebR\xe4\xdb\xd7n%\xcb\x9d\x8c\xcb\\\xbd\xa3Kd\xf3\x9cqoi&H2\xd0*\x05\xefn(/\x1a\x96=X\xf0\x1b\xa2}\xffHr\x9a\xa3]\xbf\xef\x02$\xd1\x0e+\xb8x\xfe\x1b\x97\xae\x02km{}\xf7]\'\x1a\xf6h\xadPv/q(\xd9P\xcf\x83\x0eD!4\x98\xf8\x97\x90\x06\x1eY\xfa\xb1\xbbep\xe8\t9\xa4\xee\xaeC\x15\xab\x1d\xb8\xa6\x16k/\x08\xb9g7\x94\x8br\xdf]t\x97\xea\xdc\xe9\x9b\xd1\\\x83\xe9!w\x15\xeb\x0b5\xd0\xccBjN\t\x1c\xbc#\x8c\x06\xfdj\xc9\x9a\x00\xfbd\xb6\xce\xb4\xea&\xd0i\x97\x1a\xfb\n\xf5\x94p\x98 \x983U`\xf7\xe6\nz\x16u\xa1ww\xa7O\\px\xd0\x18oa\xdc\x9c\xb7\xc2\xe7V\xa2\x89\xd0\xba:\xfa^\x9e:\xa83\xd5\xc4\xdf\xba\xc7Q\x0bs\x89y\x84P\x9b\xe54\x12\xa6\xdf\xc5k7E\x00\xfb\xc2L\xf6\xfa\xaa\x95\xfe\xa4\xfd\x98F\x12\xdb\x87\x936\x9b\xf1\xaaO\xd1L\x81\xc8\xcd]\xfd\xaa\xc2\x1d7\xf9\xd6\xd5\x0b\xf5\x12#\x05\xac.6\xaa\'v\xc1)\xebv\xc3\x82\xd4<\x03&\x04!~\x93\xb4\xb7\xea\xdd\xf3\xc1gc\xef\x8c\xe5\x15\t\t\x12\xb9\xc9f\xe8\x9f\x97k\xf1ka\x98\xef\x9d\xdb\x177\xde/\x9a`\x18V\xb0[:\xfc\xd4\xba\x12\xa4\x0e\xd3\x07\xc3\xc4\xd9p\xa7\x19\x15c\xc9\xa6\x98\xa1\xa9\r\x8a\xa3\x8cL\xc4\x85x\x03_\xff\x89+\xde|\xb4\x04\x04Bwy\xd3\r\xe0g\x14\x19\x9d\xef(\xe7D\x96\xfa_\xc0\xf0\x1d\xdaz`\x1c\'\xd2\xd3xz7<\xc8|[\x1e%\xc6\xd3+!k\x15\xc0}\xe4\xbc\xeaS\x8a\xcc#\xda\xff\x02\x9a\x97\xb7\x11\x92\xf1\x1fi\x1cVx[D\xaaU\xb6\xa9\x1c\x16Q\xb2~G.\xb8\xe4\x11WT\xa6rZ\x99b\xfd\xc0\x0046\x8f\xeaCi\xb4M\xac\x1d\x04\x1e\x14\xf6\x9f\x8a\xed`U\x97\xb8\xeb\xa7\x1a\xb5U\x14\x88m\xdd~\xdfL\xfe\xdegp{q\xaf\x92\xe4P\x1ff\x93\x07\xe2o\x1f8\xde\xac\xdd\xff\x97?S\xa9xv\xb6\xaf\x80\xabP\x1f\x95_b\x9a\xb6D\xe9-.\xe7x\xbe\xf3\x07\xd0m\xa1\x07e\xae\xeb\xb0\xc3+S\xf2AK\xe8!\xf4paE\x15\x07\x97i\xa3*\x0f\x03\xb7\xee\xbd\x03~\xc8\xbf\x135iP\xb4\xf0FZ:Z\x95\xf0f\xa1\x96\xdb\xb4\xcb\x92\x8c\xfa\xd1\x0fC\x0bm\x98\xa7c\xefMmM\x93\x8e\x95S\xe3\xb7v!\xde\xa57\xd0\xa2>]B\xec.\xb7\n\xaf7\xea\x16\xe8\x7f\x0b\t\xe0\xf8\xc30B\xdf/\xa5}\x9a\xd4\xce\xe5\xf1u\xfa..\x1e~K\xd7\xa8\xfa\xb38\xd5;\x93\x0cq\xe9\x97\xbfc1\xc0\xe5\xba\x00\x88=Bb\xa3\xf6\xb9\xe2\n\x15@]F\xce\xe6\x1dG\xd4\x0b\xe8L\x18\x9f,\xabN9\x02d\x19mu\\\x9e\x94\xb39{\xa4\xbc`9\xfb,\x91kq\x91\xe1\xfd:\x1c\x80\xe1\xf1\xdb\xdc+\x91\xbd\xec\xd3A\xaa\xac\x0f\x04k\xf2\xc1\xbd_z\xef\x07i\xc7\x97\xfaj\x9d\xc2G\x85\xac\xfc\xf6U\x80\x00h\x81b\x0b\xde%\xcea\x7f\x07\xc1^\x05\x99`\x93\xfeC\xba\x7f\x03\xbf\x92\x17om|\x1c\x83u\xba\xa5\x17\x84\xc0A\xf1\xd1\xff8r\r\xe1m\x9d\xa8@\xf9\xe7t\xcc\xc2oa\x12\xa0w\xa8V\xc2\x7f\xa7G\r\xff\xe9\x18X\xbd\x94\x85\x0b=\x92\x9c\x80\x85B\xa6\x9e#\x84\xb8\x91F\x9c\xcbi8\xe2\x90+)\xd2CR\xb4\x9b)\x07\xd5\xec\xe8\x1c2\xd0\xe4\x13\x18l\xc0~I:k\rM\x02\xae\x8d\xbf\xae\xa5\xcc\xcbX{\\\x86 \x90\x8f*@9~\x8f`S\x11\\O\xfd{;\x06\x17\xd1\x14\xa64\xa7\xeb\x0e$\x14\xd6\xfc!k\xaa\xb7~\xa7\xf1+\x84!\xa3,^\xa6\xeb\xfa]i\xec\x87\x82\x90\x16CF\xc1]\xc7@\xce\x7f#\x04\xfd)\x17\xef&\xddu\xe8\xbd\xbd\x1d\xb2\xf7\xc8`\x15\xbe\xa5Nm.\n\x91\xd0\xbd\xf8I\x87\xcb&\x08\x06s\xd9\xe5\xb2\xd6\xb9\x16\x97\xd048\x15!L\xa1\xfb\xd6`5f\xc80v@\xb1d\x97\x01(\xd3\xe1\x90\\\xfao\x84Y\xce\xb7s\xd6.\xcb\xa6E\xdf\x07\xb3\xd2\x00\r\x97\'g\xf6\xce1\xdd\x97\xba\x92x\xaa\xd1\xc2\xfa+\x1c\xaa\xcc\x85\xe9?\xe8_8\xd1\xc3V\xaf\x07M\x82\xbfA\xca\x9f kv\xf8h\x80\xde\x0c\x16\xa3\x9f\x83\xf5\xe9\xf0\xca]\x02\x12\xc3#\x16\x81\xce\x14\xa8*\xe6\xb9o\xfdx\xe8T\xca@\xc2\x08gSk\xdfK\xa3\xb1\x99\xfe\xb9\x17\xbe\xf6\xab\xf4\xa4\x9e\xaa\x93\x9595|\x82\xacd>\xb5\xd8nG\xe4%?\xe6\x03\xe8\x94q8\xf8\x9e\xed\t\xf7\x18\x08\x87\xdd<|\x80\xed\xb9\tOL\xab4\xf0s\xb2\xfa\x94c-T^\xebP\xeb\xae\xf3\xfa\xc0\x0e<q\xf5\x0c\x98\xd5Do\t\xb2(\xfc+|\xff*\xf8\xcfm%\\}(M\xd2\x9e\xf0\x18\x1b\x1c\xbf\x1f\x89\xe6\xf1\x00T\xa8\xe8\xbce\xe8\xbfJ\x838\xdbx\x94\x7f\xea>x\x1ed\x14UvK\x91\xa8\xef-\x01\x0c6e\x80\xd5\x1cUl.\xebA\x85\xbb:\x9f\xf9Pq\xab\xeb3\xe8\xc7\xe2{\xf2R\x9fL\x91\xbb1E\x8f\x15$\x06U\xa1\xd3\xf2\xea\x03\x98\\\x08-\x99\xe2\xdcsk\x10o\xc7\\\x06\x9cQ\x88\xc4\x821\xf8\xef"\x1eSud\xc7\xe7\x01\xa4\x81\x13\xdb\x9b\xd0tW\xbdb:n\x85\x18\xa7\xe7\xc1xt\xfd\x83[\'\xfb=\x114\xfc^\xc4\xc1\x9c\xb9\xfc\xd5\\_\xfb*PX\xa8\xa7\x86(\xa0\xa2\xfc\x1a\x04\xc6\xc4\x80\xcb;\x1a\x14\xb2\x16*\xf4\r\xcaU\'c\xaa\x10\xb6e>^?\xc9\xef\xde\x0fk\xc3\xbd{\xc2\x82;\x99\xc9\xbe\x97\xa2\x92 \xa4\xaf\'a\x8d[o\xcd15P\xeb\xca`{L\xd4FA\xec\xb6\x9c\xe7x\n[\xdc\xc7\n\x82\x82\x9c\x08=\xc5\x8e\xa2!\x98\xe9\x18,LY\xd4\xf8A,\xb2z\xd4\x13)\x1aH\x1a\xb0\xb8\xc5\xca\xc9\x19\xf8\xd3^L\xed\xa9\xc1a\x82\xa3U\x81\xdf\xbb\t\xc5\xfb<\xa3\xa3\x18\x16\x82A\xd2|Q\xeb\xb0j\xe6\xfbF1\xffp\x07\xe1\xf8+\x89\t\x9d\xaa!\x83\xa4K\xa4\\\xe6@\xa5\xfc\xb0\xc8\xde|\x02\x05\xb7\xa2\xd6\x82\x80\xaf\xf3/<1UtY\xe7O`\x97\xac=4\xbb\x02\xcd\xcdy\x92\xbaw\xa6\x9b\x8b\xbf\xd8\xbaYZ\xd1\xa1\xce\x01Ti.\xc01\xf6\xe6\xd9\xd6\x027\x17<%\x14\x06\xb7\n\xb1D\xf7\xdb$1V\xb3v\x109\x83?\xea\x19z\xc64\xf0g\xab\xee\xb4[\x02\r\xf1\x99$\x8a\xee.\xeb\x86\xb9\xd4\xfb\x84aV1\x80\x92\xbe\xd8hVdpd\xd0\xe1Y\xa0\xb7\xe4o\x18v\x90\xb1\xd9.M\x9f>\x89\xfdGd>]\xd9\xec\x16$\xbf;9\x03yD\x9d\x95\xb8qS~\x00\x96\xb7\xcd\x18K\xe7| \xad\xcf\xb6\xffu-\x8f\xba\x02\xca\xae\xfaq\x15\xa0\x83\xd4zA\xdaRds\xbfc%J/\x84?q\xf4\xf6\xb0u\t\x92\x89\xc3\xda~\xd0\xa6\xf3-\xb7M^\xa9\xbe\xe6\xcb\xa4\xacWdh8*J\xb66\xab;"\xfaeY\xe1\xad\x90+Z\xc3\x83\xeah\x89Z-\xda.\xe7\xe44\xa9\xa51!\x1eMZ$%\xd8\x82\x81\xaas-5\x05\xd4p\xae\xa0=\xd46K\rO\x7f\xf2\xdf\xcc\xa5\xb8\x98Z\xb4\x08\x9e\xe8\xf6\xf0k\xd2\x11\x18\n&\xb3\x19-\x1do\xb2\x90\xe7\x17!\xd9k\xb9P\x84\xa6\x9c\xbd\xf9\x19\xb2\xa5R\xe73\x837qk\x06\xfd\xd6\xabL\x05\xc7`r\xe3\xcc\xb3|\xe4\x96\xc8\xd3\x03\x19~A\xd9\xbaI\xdb1\xfa\x04\x82<\xb2h\x116\xb5\xb1\x96\x84\xb7\x16\xc3\xfd\xc3)T\x0f\x8a\xee\x9fS(\x01\'}\xb53\x00\xd5\x93G\x18\x8e\xb4%\x90\xc1\xbdN\xb4\xe8\xe7\xe8P\x87\xff\x16k\x10\xeb\xf4\x82\xd6_Z4\x15\xc7\xd2\xbfP}\xee\x94p:*\xd6>\x1f\xc6\xccP\x0c\xb6]\x1c\xfd99\xf9\x05\xd97(\x97\xbfQ\x15;W\x10x6"es]#\x88\xe6\xe4\xdb\x1c\xe84\x00d\x8a\xb3\\\xae\xcb\x10a\xe9\xd3l\x95\xa2l\xa9\xf9t\x174"\xdc\xe8\xca\x1b\xad\xcd\xfa\x92\x8a\x14lL\xba\x8f\xda\xa1\xff/\xc4\xb6oi!\x1e\xd6\xe2\xfb\xdcO\x19L\x04\\\x12g\xfd\xe7\xad\x92\xd0\x9bsX\xd7\x93\xdf\x0b\xcb\x94\xffO^\xe8\xde\xb3<\xb23\xd70(L\xd9\xa1\xb6\x0b/\xc7Xv\x1cN\xcex\xda\xe6"\x00\xca\xd5\xa7P\x99h\xfa\x18\x96\x8c\xc8VFT\xa1v\x08\xcd\xac\xcf0cM\x89"\x14\xabjS\x12]\xdc\x02\x05QC\x8b\xfd\xf5\x92blU\xa1\x0fa\xe8\x8f\x11\x0fzZ\xc6\xc7E\xf3\x99\x06\xf7E:_\xc6?\x03\xe1\x17\x91\x96\xbb\xdc\xf7\xbfJ\xf4\xbc\xd7\xbcy\x94\xb8\x16#\xbf\x01\x99z9\xaa\xd0\xe5\x8d\x19"\xce\xb2\xdb\xb4\xad/|~-\xf7I\xc3\xd7\xe1\x1f\xab\xbf@\xe1\x1eTT\x0ctV\xca\x89\xa4R@\x84\x02\x03p\xa6&\xf2AJp4jBmL\x84\x85\x0cI\xb0\xf9\xf8\x9f#\xfa>\xa6?p\xfd[\x03f\x19\r\xde\xcd~\xf2\x1dV\xe3\xb2UqF\xf3T\x14C\xcd\xb1J\x90\x83F\xb7\r\xad\xe5\xe9\x8d?\xbc\xf6Bu\xbd\xde?\xc0\x009\xb4\xe2\x82\xc3\x17\x03\xaf(\xbe\xd0-\xd5a\x9e\xe9\xa3\xd9\x19!\xab!>\xfa\x9d\x1f\x88\xee%\xb0\xed\xa5\xe0\xa2A\x92\xfb\x9e\xda\xc3C\xc6Z\xb7\xe3\x963:s\xfcS\x9a\x92\xb53u\xc8n\xd2\x85\xa2q\x8d\r\t%\x80|xt8\xc4@\xf9l\x0c\xdc\x0bB\x97\xe3\x86H\xa0\x8a\xa30\xd9j\x1a\'\x0b\xff|\xa5\xafS\xfd"2\x07~\xe5B.\x04\xe2vN\x83\x8d{\xc7U\x04(\xef\xa5\xae\xf6U\xd9\x9a\xf4\xe1\x17\xed\xdb\xab\xe2p\x85R.\xa2\xb6GNa\x14"\xf9\xa1\xcem\xc8D\xb9fb\xa8c\xccfy!\xdd<rV\xe1\xba\xceKW\x84\xf35q\x1dwA\xa9\xae\xea\xa4\x1c\xdd\xf5\x7f\xeb\xe0\x93\xd9\xc1\x1c\t\x1b\xa4\xc8Rn9\xd8T\xf8\xf8\xb0\x830\x8e\xbf\xca\x99&Q$\x9f\xae\xed\x96~\xdaI:%\xc3\xf0h3\x81\xcd\xa7V\x91\xf7\x1c\x90j\xd7Pf\x176\x88\x1b\xc9)\xca\'\xe8(\xca\x1a\xa7W\xf0}\xee\xa0\t\xd3{?\x01\x0f\x0f\x172\xd5\xf6\xc5W\x7f\x0b\x92\x8fp\x87|\xbe)\xec\x8bp7\xa5{\x95g\x05\xe3\twlQ\x071&\x04Rn\xf8\xe4\xe5$\tL\x9a\x06\xb14\x8fT\t\n[&\xb8\x8b\xdfa\x90\xdf\x9a\x7f\xdcj&\xe2#.\xcd:\x1d\xed\xd5m\x12^-\x04\x1c\x99\x07\x96\xfd\x90\xf9 YKS\x1e\x08|\xfb\xc7`\x1b\xaa\xa3n\xd4"\xbd\x13J\x9aB\xc2\x9d\xee\x189a\xd8\x9ax\xafd\x87\xcbu\x82\x98\xf6\xba\xf7\xfa\xa2=;b\x06E\xd6E\xe7\xd6\xeaD\\\xee\xc71\x10QV\x0f\x0f:\xdaoq\x1c\x0c\xf1\xd9\x90\x8c\xcd\xcd\x18\x06\xdd\x89\xb2\xe9\x8d\xc8\xb7b\xc5\x08\x88\x00/\xe4\x84\xb0\xe8\r \xa8\xbf\x92 \xf2\x94\xa3t\x19\x14^\xe4\x03\x06\xf5!VF\x15\x92\x95\x89\xd5S\xdc3T\xc6\xdd^\xc7\xb0\xffs\x0c*H\xcf\xa0D\xd0jx\xe42\xa5\xea}\xcb\x99\x05\xbdi[\xb8q(a\x10\xcd\x18\x9b\x15,\xd2\xe8@\xdfj^\x9e\xdc\xc4\xff\xfc\xa9.\xe3'))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file minipy3-1.0.0.tar.gz.
File metadata
- Download URL: minipy3-1.0.0.tar.gz
- Upload date:
- Size: 20.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.11.0b4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d32a7310a4b64ef062e5a41dd07abce6ae65efe9c8b3c22492790fafbfb2f6a2
|
|
| MD5 |
79143d5760250e94f8aa7dbb31437686
|
|
| BLAKE2b-256 |
eb7b7e9856c9ec2c16c5fda33e45841c8f83505d0ca91101d03b902607bb690c
|
File details
Details for the file minipy3-1.0.0-py3-none-any.whl.
File metadata
- Download URL: minipy3-1.0.0-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.11.0b4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9caff2e69c64fb0fee212eac01df074e86d100b503aefac86f9e4b9376fee720
|
|
| MD5 |
e941020d24213c30168f496786b70c24
|
|
| BLAKE2b-256 |
f450ed30b012ff2d22b28a14c0b19529e5ab87ff88075f31b30a2a9d3e5240f8
|