a DOgo@sddlZddlZddlZddlZddlZddlZddlZgdZdZej drVdZ ne Z Gddde Zejdd Zd d Zdd d ZdddZddZdddZedkredS)N) ZipAppErrorcreate_archiveget_interpreterz8# -*- coding: utf-8 -*- import {module} {module}.{fn}() winutf-8c@s eZdZdS)rN)__name__ __module__ __qualname__r r /usr/lib64/python3.9/zipapp.pyr!srccsLt|ttjfrBt||}|VWdqH1s60Yn|VdSN) isinstancestrosPathLikeopen)archivemodefr r r _maybe_open%s &rcCs$|r d|td}||dS)N#! )encodeshebang_encodingwrite)r interpreterZshebangr r r _write_file_prefix.src Cst|dx}|d}|dkr*d}|t|d0}t||||t||Wdn1sj0YWdn1s0Y|rt|trt |t |j t j BdS)Nrbrwb)rreadreadlinerrshutil copyfileobjr rrchmodstatst_modeS_IEXEC)rZ new_archiversrcZfirst_2dstr r r _copy_archive5s     Hr+Fc Cs d}t|drt|drd}nt|}|r4d}|rHt|||dS|sXtd|d}|rt|rttd|s|stdd}|r|d \} } } td d | d D} td d | d D} | d kr| r| std|t j | | d}|dur | d}nt|ds"t|}t |d}t|||rDtjntj}tj|d|dh}|dD]4}||}|dus||rf|||qf|r|d|dWdn1s0YWdn1s0Y|rt|ds||jtjBdS)NFr!r"TzSource does not existz __main__.pyz8Cannot specify entry point if the source has __main__.pyzArchive has no entry point:css|]}|VqdSr  isidentifier.0partr r r {rz!create_archive...css|]}|VqdSr r-r/r r r r2|rzInvalid entry point: )modulefnz.pyzrr w) compression*r)hasattrpathlibPathis_filer+existsr partitionallsplit MAIN_TEMPLATEformat with_suffixrrzipfile ZIP_DEFLATEDZ ZIP_STOREDZipFilerglob relative_toras_posixZwritestrrr%r&r'r()sourcetargetrmainfilter compressedZsource_is_fileZhas_mainZmain_pymodsepr5Zmod_okZfn_okfdr7zchildZarcnamer r r rLsX            RrcCs\t|d>}|ddkr:|tWdSWdn1sN0YdS)Nrrr)rr!r"stripdecoder)rrr r r rs rcCs<ddl}|}|jddddd|jddddd|jd d dd d|jd d ddd|jddddd|jddd||}|jrtj|jst dt |j}t d |pdt dtj|jr|jdustj|jr tj|j|jr t d|jrt dt|j|j|j|j|jddS)Nrz--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.)actionrWz--infoFz)Display the interpreter from the archive.)rVrYrWrJz'Source directory (or existing archive).)rWz%Can only get info for an archive filezInterpreter: {}zz-In-place editing of archives is not supportedz,Cannot change the main function when copying)rrLrN)argparseArgumentParser add_argument parse_argsinforpathisfilerJ SystemExitrprintrBsysexitoutputr=samefilerLrZpythoncompress)argsrZparserrr r r rLsL         rL__main__)N)NNNNF)N) contextlibrr:r#r&rcrD__all__rAplatform startswithrgetfilesystemencoding ValueErrorrcontextmanagerrrr+rrrLrr r r r s.    J 1