eaiovnaovbqoebvqoeavibavo B  fo@sddlZddlZddlZddlZddlZddlZddlZdddgZdZej drXdZ ne Z Gddde Zejd d Zd d Zdd dZdddZddZdddZedkredS)N ZipAppErrorcreate_archiveget_interpreterz8# -*- coding: utf-8 -*- import {module} {module}.{fn}() winzutf-8c@s eZdZdS)rN)__name__ __module__ __qualname__r r +/opt/alt/python37/lib64/python3.7/zipapp.pyr!sc cs8t|ttjfr.t|| }|VWdQRXn|VdS)N) isinstancestrosPathLikeopen)archivemodefr r r _maybe_open%s rcCs$|r d|td}||dS)zWrite a shebang line.s#! N)encodeshebang_encodingwrite)r interpreterZshebangr r r _write_file_prefix.src Cst|dZ}|d}|dkr*d}|t|d&}t||||t||WdQRXWdQRX|rt|trt |t |j t j BdS)z8Copy an application archive, modifying the shebang line.rbs#!wbN)rreadreadlinerrshutilZ copyfileobjr r r chmodstatst_modeS_IEXEC)rZ new_archiversrcZfirst_2dstr r r _copy_archive5s      r'Fc Csd}t|drt|drd}nt|}|r4d}|rHt|||dS|sXtd|d}|rt|rttd|s|std d}|r|d \} } } td d | d D} tdd | d D} | d kr| r| std|t j | | d}|dkr | d}nt|ds"t|}t |d}t|||rDtjntj}tj|d|db}xB|dD]4}||}|dks||rh|||qhW|r|d|dWdQRXWdQRX|rt|ds||jtjBdS)abCreate an application archive from SOURCE. The SOURCE can be the name of a directory, or a filename or a file-like object referring to an existing archive. The content of SOURCE is packed into an application archive in TARGET, which can be a filename or a file-like object. If SOURCE is a directory, TARGET can be omitted and will default to the name of SOURCE with .pyz appended. The created application archive will have a shebang line specifying that it should run with INTERPRETER (there will be no shebang line if INTERPRETER is None), and a __main__.py which runs MAIN (if MAIN is not specified, an existing __main__.py will be used). It is an error to specify MAIN for anything other than a directory source with no __main__.py, and it is an error to omit MAIN if the directory has no __main__.py. FrrTNzSource does not existz __main__.pyz8Cannot specify entry point if the source has __main__.pyzArchive has no entry point:css|]}|VqdS)N) isidentifier).0partr r r {sz!create_archive...css|]}|VqdS)N)r))r*r+r r r r,|szInvalid entry point: )modulefnz.pyzrrw) compression*zutf-8)hasattrpathlibZPathis_filer'existsr partitionallsplit MAIN_TEMPLATEformatZ with_suffixrrzipfileZ ZIP_DEFLATEDZ ZIP_STOREDZZipFileZrglobZ relative_torZas_posixZwritestrrr!r"r#r$)sourcetargetrmainfilter compressedZsource_is_fileZhas_mainZmain_pymodsepr/Zmod_okZfn_okfdr1zZchildZarcnamer r r rLsT            &c Cs:t|d&}|ddkr,|tSWdQRXdS)Nrrs#!)rrrstripdecoder)rrr r r rs cCs<ddl}|}|jddddd|jdddd d|jd d dd d|jd dddd|jddddd|jddd||}|jrtj|jst dt |j}t d |pdt dtj|jr|jdkstj|jr tj|j|jr t d|jrt dt|j|j|j|j|jddS)zRun the zipapp command line interface. The ARGS parameter lets you specify the argument list directly. Omitting ARGS (or setting it to None) works as for argparse, using sys.argv[1:] as the argument list. rNz--outputz-ozAThe name of the output archive. Required if SOURCE is an archive.)defaulthelpz--pythonz-pzEThe name of the Python interpreter to use (default: no shebang line).z--mainz-mzLThe main function of the application (default: use an existing __main__.py).z --compressz-c store_truezQCompress files with the deflate method. Files are stored uncompressed by default.)actionrIz--infoFz)Display the interpreter from the archive.)rHrKrIr=z'Source directory (or existing archive).)rIz%Can only get info for an archive filezInterpreter: {}zz-In-place editing of archives is not supportedz,Cannot change the main function when copying)rr?rA)argparseArgumentParser add_argument parse_argsinfor pathisfiler= SystemExitrprintr;sysexitoutputr6samefiler?rpythoncompress)argsrLparserrr r r r?s<         r?__main__)N)NNNNF)N) contextlibr r4r r"rUr<__all__r:platform startswithrgetfilesystemencoding ValueErrorrcontextmanagerrrr'rrr?rr r r r s*     I 1