o
9jO @ s d Z ddlZddlZddlZddlZddlZddlZddlm Z ddl
mZ g dZdddZ
dddddddd
Z ddddddddZ dddZdd Zedkrhee Zee dS dS )a Module/script to byte-compile all .py files to .pyc files.
When called as a script with arguments, this compiles the directories
given as arguments recursively; the -l option prevents it from
recursing into directories.
Without arguments, if compiles all modules on sys.path, without
recursing into subdirectories. (Even though it should do so for
packages -- for now, you'll have to deal with packages separately.)
See module py_compile for details of the actual byte-compilation.
N)partial)Path)compile_dircompile_filecompile_pathc c s |dk rt | tjrt| } |std| zt| }W n ty6 |dk r2td| g }Y nw | |D ]>}|dkrDq=tj
| |}tj |sU|V q=|dkr{|tjkr{|tj
kr{tj |r{tj |s{t||d |dE d H q=d S )N zListing {!r}...zCan't list {!r}__pycache__r ) maxlevelsquiet)
isinstanceosPathLikefspathprintformatlistdirOSErrorsortpathjoinisdircurdirpardirislink _walk_dir)dirr
r namesnamefullname r !/usr/lib/python3.10/compileall.pyr s:
r Fr stripdir
prependdir
limit_sl_desthardlink_dupesc
C sZ d}|dur|
dus|durt d|dur| }
|}d}|dk r$t d|dkrEddlm} z| W n ty> d}Y nw ddlm} |du rMt }t| ||d}d }|dkr|dur|pad}||d
#}| t
t||||||| |
|||
d|}t|d d}W d |S 1 sw Y |S |D ]}t|||||||| |
|||
d
sd}q|S )a Byte-compile all modules in the given directory tree.
Arguments (only dir is required):
dir: the directory to byte-compile
maxlevels: maximum recursion level (default `sys.getrecursionlimit()`)
ddir: the directory that will be prepended to the path to the
file as it is compiled into each byte-code file.
force: if True, force compilation, even if timestamps are up-to-date
quiet: full output with False or 0, errors only with 1,
no output with 2
legacy: if True, produce legacy pyc paths instead of PEP 3147 paths
optimize: int or list of optimization levels or -1 for level of
the interpreter. Multiple levels leads to multiple compiled
files each with one optimization level.
workers: maximum number of parallel workers
invalidation_mode: how the up-to-dateness of the pyc will be checked
stripdir: part of path to left-strip from source file path
prependdir: path to prepend to beginning of original file path, applied
after stripdir
limit_sl_dest: ignore symlinks if they are pointing outside of
the defined path
hardlink_dupes: hardlink duplicated pyc files
NPDestination dir (ddir) cannot be used in combination with stripdir or prependdirr z%workers must be greater or equal to 0r )_check_system_limits)ProcessPoolExecutor)r r
T)max_workers)ddirforcerxr legacyoptimizeinvalidation_moder$ r% r&