Re0 @ s d d l m Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z m Z m
Z
m Z d d l m
Z
d d l m Z m Z m Z m Z m Z e j e Z d j Z e j d Z d Z Gd
d d e Z d S) )BytesION ) sysconfigfsencodedetect_encodingZipFile)finder)FileOperatorget_export_entryconvert_pathget_executablein_venva
s ^#!.*pythonw?[0-9.]*([ ].*)?$a{ # -*- coding: utf-8 -*-
if __name__ == '__main__':
import sys, re
def _resolve(module, func):
__import__(module)
mod = sys.modules[module]
parts = func.split('.')
result = getattr(mod, parts.pop(0))
for p in parts:
result = getattr(result, p)
return result
try:
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
func = _resolve('%(module)s', '%(func)s')
rc = func() # None interpreted as 0
except Exception as e: # only supporting Python >= 2.6
sys.stderr.write('%%s\n' %% e)
rc = 1
sys.exit(rc)
c @ s e Z d Z d Z e Z d Z d d d d d Z d d Z d d d
d Z d d
Z
e Z d d Z
d d Z d d d Z d d Z e d d Z e j d d Z e j d k r d d Z n d d d Z d d d Z d S) ScriptMakerz_
A class to copy or create scripts from source scripts or callable
specifications.
NTFc C sg | | _ | | _ | | _ d | _ d | _ t j d k | _ t d | _ | p] t
| | _ d S)NFposix X.Y)r r )
source_dir
target_dir
add_launchersforceclobberosnameset_modesetvariantsr _fileop)selfr r r dry_runfileop r 6/tmp/pip-ztkk0jow-build/pip/_vendor/distlib/scripts.py__init__K s zScriptMaker.__init__c C sg | j d d rc t j d k rc t j j | \ } } | j d d } t j j | | } n | S)NguiFntpythonpythonw)getr r pathsplitreplacejoin)r
executableoptionsdnfnr r r! _get_alternate_executableW s
!z%ScriptMaker._get_alternate_executable c C s d } | j r! | j } d } n t j s9 t } nq t rp t j j t j d d t j d } n: t j j t j d d t j d t j d f } | r | j
| | } n | r d | k r d
| } n t | } d | | d } y | j d
Wn" t
k
r7t d | Yn X| d
k ry | j | Wqt
k
rt d | | f YqXn | S)NTFscriptszpython%sEXEBINDIRz
python%s%sVERSION z"%s"s #!s
zutf-8z,The shebang (%r) is not decodable from utf-8z?The shebang (%r) is not decodable from the script encoding (%r))r, r is_python_buildr r
r r( r+ get_pathget_config_varr0 r decodeUnicodeDecodeError
ValueError)r encodingpost_interpr- enquoter, shebangr r r! _get_shebang^ s@
zScriptMaker._get_shebangc C s | j t d | j d | j S)Nmodulefunc)script_templatedictprefixsuffix)r entryr r r! _get_script_text s zScriptMaker._get_script_textc C s t j j | } | j | S)N)r r( basenamemanifest)r exenamebaser r r! get_manifest s zScriptMaker.get_manifestc C s | j o t j d k } t j j d } | sA | | | } n| | d k r_ | j d } n | j d } t } t | d }
|
j d | Wd QX| j } | | | | } x| D]} t j
j | j | }
| rt j
j
|
\ } } | j d r| }
n d |
}
y | j j |
| Wqzt k
rt j d d
|
} t j
j | rt j | n t j |
| | j j |
| t j d y t j | Wn t k
rYn XYqzXn t j d k r|
j d | rd
|
| f }
n t j
j |
rH| j rHt j d |
q n | j j |
| | j rz| j j |
g n | j |
q Wd S)Nr$ zutf-8pytwz__main__.pyz.pyz%s.exez:Failed to write executable - trying to use .deleteme logicz%s.deletemez0Able to replace executable using .deleteme logic.z%s.%szSkipping existing file %s)r r r linesepencode
_get_launcherr r writestrgetvaluer( r+ r splitext
startswithr write_binary_file Exceptionloggerwarningexistsremoverenamedebugendswithr r set_executable_modeappend)r namesr@ script_bytes filenamesextuse_launcherrS launcherstreamzfzip_datar outnamenedfnamer r r!
_write_script sT
# zScriptMaker._write_scriptc C s | j d d | } | j | j d } | j } t } d | j k r^ | j | n d | j k r | j d | t j d f n d | j k r | j d | t j d d f n | r | j d
d r d } n d
} | j
| | | | | d S)Nzutf-8r- r Xz%s%sr zX.Yz%s-%s r# FpywrO )rA rI rT r r r addsysversionr' rr ) r rH rg r- r@ scriptr scriptnamesrh r r r! _make_script s !' zScriptMaker._make_scriptc C sA d } t j j | j t | } t j j | j t j j | } | j r| | j j | | r| t
j d | d Sy t | d } Wn' t
k
r | j s n d } Yn Xt | j \ } } | j d | j } | s
t
j d | j | d St j | j d d } | rId } | j d pCd
}
n | s| rb| j n | j j | | | j r| j j | g n | j | n t
j d | | j | j j s*| j | |
} d | k rd
} n d } t j j | }
| j |
g | | j | | n | r=| j n d S)NFznot copying %s (up-to-date)rbr z"%s: %s is an empty file (skipping)s
s
Tr r1 zcopying and adjusting %s -> %ss pythonwru rO )!r r( r+ r r r rJ r r newerr\ ra openIOErrorr r readlineseekr] get_command_name
FIRST_LINE_REmatchr* groupclose copy_filer rc rd inforA rr read)r ry rg adjustrn fr= lines
first_liner r> r@ rh ro r r r! _copy_script sR $
%zScriptMaker._copy_scriptc C s
| j j S)N)r r )r r r r! r
s zScriptMaker.dry_runc C s | | j _ d S)N)r r )r valuer r r! r s r$ c C sf t j d d k r d } n d } d | | f } t j d d d } t | j | j } | S) NP Z64Z32z%s%s.exerR r r )structcalcsize__name__rsplitr findbytes)r kindbitsr Zdistlib_packageresultr r r! rU s zScriptMaker._get_launcherc C sK g } t | } | d k r1 | j | | n | j | | d | | S)a
Make a script.
:param specification: The specification, which is either a valid export
entry specification (to make a script from a
callable) or a filename (to make a script by
copying from a source location).
:param options: A dictionary of options controlling script generation.
:return: A list of all absolute pathnames written to.
Nr- )r
r r{ )r
specificationr- rg rH r r r! make' s zScriptMaker.makec C s4 g } x' | D] } | j | j | | q
W| S)z
Take a list of specifications and make scripts from them,
:param specifications: A list of specifications.
:return: A list of all absolute pathnames written to,
)extendr )r specificationsr- rg r r r r!
make_multiple: s
zScriptMaker.make_multiple)r
__module____qualname____doc__SCRIPT_TEMPLATErD r, r" r0 rA rI _DEFAULT_MANIFESTrK rN rr r{ r propertyr setterr r rU r r r r r r! r B s&