0{Ys@sddlmZddlZddlZddlZddlZddlmZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlm Z m!Z!dd l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+dd l,m-Z-m.Z.e j/e0Z1da2e3ed rd Z4n9ej5j6d rdZ4nej5dkrdZ4ndZ4ej7dZ8e8 r$dej9ddZ8nde8Z:e4e8Z;ej"j<j=ddj=ddZ>ej7dZ?e?oe?j6dre?j=ddZ?nddZ@e@Z?[@ejAdejBejCBZDejAdejBejCBZEejAdZFe jGd krd!d"ZHn d#d"ZHGd$d%d%eIZJeJZKGd&d'd'eIZLd(d)ZMeMZN[Mdd*d+ZOdS),)unicode_literalsN)message_from_file) __version__DistlibException) sysconfigZipFilefsdecode text_typefilter)InstalledDistribution)MetadataMETADATA_FILENAME) FileOperator convert_path CSVReader CSVWriterCachecached_propertyget_cache_base read_exportstempdir)NormalizedVersionUnsupportedVersionErrorpypy_version_infoppjavajycliipcppy_version_nodotz%s%spy-_.SOABIzcpython-cCs|dtg}tjdr+|jdntjdrJ|jdntjddkro|jdnd j|S) Nr Py_DEBUGd WITH_PYMALLOCmZPy_UNICODE_SIZEu) VER_SUFFIXrget_config_varappendjoin)partsr44/tmp/pip-ok8sy_ze-build/pip/_vendor/distlib/wheel.py _derive_abi;s r6zr (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))? -(?P\w+\d+(\.\w+\d+)*) -(?P\w+) -(?P\w+) \.whl$ z7 (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))?$ s \s*#![^\r\n]*/cCs|S)Nr4)or4r4r5Zsr9cCs|jtjdS)Nr7)replaceossep)r8r4r4r5r9\sc@sOeZdZddZddZddZddd Zd d ZdS) MountercCsi|_i|_dS)N) impure_wheelslibs)selfr4r4r5__init__`s zMounter.__init__cCs!||j|<|jj|dS)N)r>r?update)r@pathname extensionsr4r4r5addds z Mounter.addcCsI|jj|}x0|D](\}}||jkr|j|=qqWdS)N)r>popr?)r@rCrDkvr4r4r5removehszMounter.removeNcCs"||jkr|}nd}|S)N)r?)r@fullnamepathresultr4r4r5 find_modulens zMounter.find_modulecCs|tjkrtj|}nx||jkrAtd|ntj||j|}||_|jdd}t|dkr|d|_ n|S)Nzunable to find extension for %sr&rr) sysmodulesr? ImportErrorimp load_dynamic __loader__rsplitlen __package__)r@rJrLr3r4r4r5 load_moduleus zMounter.load_module)__name__ __module__ __qualname__rArErIrMrWr4r4r4r5r=_s    r=c@s`eZdZdZd2ZdZdddddZedd Zed d Z ed d Z e ddZ ddZ e ddZddZdddZddZddZddZddddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zdd*d+Zd,d-Zd.d/Zdd0d1ZdS)3Wheelz@ Class to build and install from Wheel files (PEP 427). rsha256NFcCs||_||_d|_tg|_dg|_dg|_tj|_ |dkr{d|_ d|_ |j |_ nEtj|}|r|jd}|d|_ |djd d |_ |d |_|j |_ ntjj|\}}tj|}|s!td |n|r?tjj||_ n||_ |jd}|d|_ |d|_ |d |_|d jd|_|djd|_|djd|_dS)zB Initialise an instance using a (valid) filename. r.noneanyNdummyz0.1nmvnr%r$ZbnzInvalid name or filename: %rr#r&Zbiar)signZ should_verifybuildverPYVERpyverabiarchr;getcwddirnamenameversionfilename _filenameNAME_VERSION_REmatch groupdictr:rKsplit FILENAME_RErabspath)r@rmrcverifyr+inforjr4r4r5rAsB                zWheel.__init__cCs|jrd|j}nd}dj|j}dj|j}dj|j}|jjdd}d|j|||||fS)zJ Build and return a filename from the various components. r$r.r&r%z%s-%s%s-%s-%s-%s.whl)rdr2rfrgrhrlr:rk)r@rdrfrgrhrlr4r4r5rms zWheel.filenamecCs+tjj|j|j}tjj|S)N)r;rKr2rjrmisfile)r@rKr4r4r5existssz Wheel.existsccsNxG|jD]<}x3|jD](}x|jD]}|||fVq*WqWq WdS)N)rfrgrh)r@rfrgrhr4r4r5tagssz Wheel.tagscCs-tjj|j|j}d|j|jf}d|}tjd}t |d}|j |}|dj dd}t dd |D}|d krd } nt } yItj|| } |j| "} || } td | } WdQXWn"tk r"td | YnXWdQX| S)Nz%s-%sz %s.dist-infozutf-8rz Wheel-Versionr&rcSsg|]}t|qSr4)int).0ir4r4r5 s z"Wheel.metadata..METADATAfileobjz$Invalid wheel, because %s is missing)rr)r;rKr2rjrmrkrlcodecs getreaderrget_wheel_metadatarrtupler posixpathopenr KeyError ValueError)r@rCname_verinfo_dirwrapperzfwheel_metadatawv file_versionfnmetadata_filenamebfwfrLr4r4r5metadatas(     zWheel.metadatac Csud|j|jf}d|}tj|d}|j|(}tjd|}t|}WdQXt|S)Nz%s-%sz %s.dist-infoWHEELzutf-8) rkrlrr2rrrrdict)r@rrrrrrmessager4r4r5rs zWheel.get_wheel_metadatac CsFtjj|j|j}t|d}|j|}WdQX|S)Nrz)r;rKr2rjrmrr)r@rCrrLr4r4r5rvsz Wheel.infocCstj|}|r2d||jd}nv|jd}|jd}|dksh||krqd}n)|||ddkrd}nd}d||}|S)Ns#!pythons s rr"s ) SHEBANG_RErpendfind)r@datar+crlftermr4r4r5process_shebangs  zWheel.process_shebangc Cs|dkr|j}nytt|}Wn"tk rOtd|YnX||j}tj|jdj d}||fS)NzUnsupported hash algorithm: %r=ascii) hash_kindgetattrhashlibAttributeErrorrdigestbase64urlsafe_b64encoderstripdecode)r@rrhasherrLr4r4r5get_hash s   !zWheel.get_hashc Csht|V}x|D]}|j|qWttjj||}|j|ddfWdQXdS)Nr.)rwriterowto_posixr;rKrelpath)r@recordsZ record_pathbasewriterrowpr4r4r5 write_records  zWheel.write_recordc Csg}|\}}tt|j}xs|D]k\}} t| d} | j} WdQXd|j| } tjj| } |j || | fq+Wtjj |d} |j || |t tjj |d}|j || fdS)Nrbz%s=%sRECORD) rrrrreadrr;rKgetsizer1r2rr)r@rvlibdir archive_pathsrdistinforraprfrrsizer4r4r5 write_recordss zWheel.write_recordsc Cs\t|dtjA}x7|D]/\}}tjd|||j||qWWdQXdS)NwzWrote %s to %s in wheel)rzipfile ZIP_DEFLATEDloggerdebugwrite)r@rCrrrrr4r4r5 build_zip.szWheel.build_zipc!s|dkri}nttfddd%d}|dkrjd}tg}tg}tg}n!d}tg}d g}d g}|jd ||_|jd ||_|jd ||_ |} d|j |j f} d| } d| } g} xKd&D]C}|kr#q n|}t j j|r x t j|D]\}}}x|D]}tt j j||}t j j||}tt j j| ||}| j||f|dkre|jd ret|d}|j}WdQX|j|}t|d}|j|WdQXqeqeWqOWq q W| }d}xt j|D]\}}}||krxUt|D]G\}}t|}|jdrt j j||}||=PqqW|stdnxl|D]d}t|jd'rqnt j j||}tt j j||}| j||fqWqnWt j|}xf|D]^}|d(krtt j j||}tt j j| |}| j||fqqWd|p|jdtd |g}x4|jD])\}}}|jd!|||fqWt j j|d"}t|d#}|jd$j|WdQXtt j j| d"}| j||f|j || f| | t j j|j!|j"} |j#| | | S))z Build a wheel from files in specified paths, and use any specified tags when determining the name of the wheel. Ncs |kS)Nr4)r8)pathsr4r5r9<szWheel.build..purelibplatlibrfalsetruer]r^rfrgrhz%s-%sz%s.dataz %s.dist-inforheadersscriptsz.exerwbz .dist-infoz(.dist-info directory expected, not found.pyc.pyor INSTALLERSHAREDzWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %sz Tag: %s-%s-%srr )zpurelibzplatlib)zdatazheaderszscripts)rr)zRECORDrr)$listr IMPVERABIARCHregetrfrgrhrkrlr;rKisdirwalkr r2rrr1endswithrrrr enumerateAssertionErrorlistdir wheel_versionrryrrjrmr)!r@rryrZlibkeyis_pureZ default_pyverZ default_abiZ default_archrrdata_dirrrkeyrKrootdirsfilesrrrprrrrr}dnrrfrgrhrCr4)rr5build4s  %              %      z Wheel.buildcBCKs |j}|jd}|jdd}tjj|j|j}d|j|jf}d|} d|} t j| t } t j| d} t j| d} t j d }t |d }|j| }||}t|}Wd QX|d jd d}tdd|D}||jkrM|rM||j|n|ddkrj|d}n |d}i}|j| D}td|,}x"|D]}|d}||||=s|>r|jdd}?tjj;|?st<d6n|?|_xF|=j=D]8\}9};d7|9|;f}@|j0|@}3|j1|3qW|>ridd,6}AxL|>j=D];\}9};d7|9|;f}@|j0|@|A}3|j1|3qcWqqntjj|| }t>|}4t?|}|d=|d=||d8<|4j@||}|r | j+|n|4jA| |d9||4SWn,t-k rb t'jBd:|jCYnXWd tDjE|!XWd QXd S).zRoot-Is-Purelibrrrstreamrr.rdry_runTz /RECORD.jwsr"zsize mismatch for %s=zdigest mismatch for %szlib_only: skipping %sz.exer7rzdigest mismatch on write for %sz.pyzByte-compilation failedexc_infozlib_only: returning Nonez1.0zentry_points.txtconsoleguiz %s_scriptszwrap_%sz%s:%sz %szAUnable to read legacy script metadata, so cannot generate scriptscommandsz8Unable to read JSON metadata, so cannot generate scriptsZ wrap_consoleZwrap_guizValid script path not specifiedz%s = %slibprefixzinstallation failed.)zconsolezgui)Frrr;rKr2rjrmrkrlrrrrrrrrrrrrrrecordrNdont_write_bytecodetempfilemkdtemp source_dir target_dirinfolist isinstancer rrstr file_sizerrr startswithrrr copy_streamr1 byte_compile Exceptionwarningbasenamemakeset_executable_modeextendrvrvaluesrsuffixflagsjsonloadrritemsr rZwrite_shared_locationsZwrite_installed_files exceptionrollbackshutilrmtree)Br@rmakerkwargsrrrrCrrr metadata_namewheel_metadata_name record_namerrbwfrrrrrrrreaderrrZdata_pfxZinfo_pfxZ script_pfxfileopZbcoutfilesworkdirzinfoarcname u_arcnamekindvaluerr%rZ is_scriptwhereroutfileZ newdigestZpycrZworknamer filenamesdistrepZepdatarrGr)rHsconsole_scripts gui_scriptsZ script_dirscriptoptionsr4r4r5installs>                #   "                 "           z Wheel.installcCsMtdkrItjjttdtjdd}t|antS)Nz dylib-cache) cacher;rKr2rrrNrlr)r@rr4r4r5_get_dylib_cache~s  zWheel._get_dylib_cachecCstjj|j|j}d|j|jf}d|}tj|d}tj d}g}t |dx}y\|j |G}||} t j | } |j} | j|} tjj| j| } tjj| stj| nx| jD]\}}tjj| t|}tjj|sHd}nQtj|j}tjj|}|j|}tj|j}||k}|r|j|| n|j||fqWWdQXWntk rYnXWdQX|S)Nz%s-%sz %s.dist-infoZ EXTENSIONSzutf-8rzT)r;rKr2rjrmrkrlrrrrrr r r. prefix_to_dirrrmakedirsr rrxstatst_mtimedatetime fromtimestampgetinfo date_timeextractr1r)r@rCrrrrrLrrrrDr-rZ cache_baserkrdestr7Z file_timervZ wheel_timer4r4r5_get_extensionss>     !  zWheel._get_extensionscCs t|S)zM Determine if a wheel is compatible with the running system. ) is_compatible)r@r4r4r5r:szWheel.is_compatiblecCsdS)zP Determine if a wheel is asserted as mountable by its metadata. Tr4)r@r4r4r5 is_mountableszWheel.is_mountablecCs tjjtjj|j|j}|jsLd|}t|n|jsqd|}t|n|t jkrt j d|ns|rt jj |nt jj d||j}|rtt jkrt jj tntj||ndS)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)r;rKrtr2rjrmr:rr;rNrrr1insertr9_hook meta_pathrE)r@r1rCmsgrDr4r4r5mounts"'     z Wheel.mountcCstjjtjj|j|j}|tjkrItjd|n]tjj ||t j krxt j |nt j st tj krtj j t qndS)Nz%s not in path) r;rKrtr2rjrmrNrrrIr=r>r>)r@rCr4r4r5unmounts' z Wheel.unmountc#Cstjj|j|j}d|j|jf}d|}d|}tj|t}tj|d}tj|d}t j d}t |d} | j |} || } t | } WdQX| djd d } td d | D}i}| j |D}td |,}x"|D]}|d}|||.rrz..zinvalid entry in wheel: %rz /RECORD.jwsr"zsize mismatch for %srzdigest mismatch for %s)r;rKr2rjrmrkrlrrrrrrrrrrrrrr rrrrrrr)r@rCrrrrrrrrrrrrrrrrrrrrrrr rr%rr4r4r5rusT          #   z Wheel.verifycKsdd}dd}tjj|j|j}d|j|jf}d|}tj|d} t(} t |d} i} x| j D]} | j}t |t r|}n|j d }|| krqnd |krtd |n| j| | tjj| t|}|| |.get_versionc Ss)d}yt|}|jd}|dkr=d|}nhdd||ddjdD}|dd7.update_version..rr&z%s-%scss|]}t|VqdS)N)r)r|r}r4r4r5 2sz7Wheel.update..update_version..z0Cannot update non-compliant (PEP-440) version %rrKlegacyzVersion updated from %r to %r) rrrrr2rrrr rlrrr)rlrKupdatedrHr}r3ZmdrEr4r4r5update_version's(   *$     z$Wheel.update..update_versionz%s-%sz %s.dist-inforrzzutf-8z..zinvalid entry in wheel: %rNr z.whlrz wheel-update-dirzNot a directory: %r)r;rKr2rjrmrkrlrrrrrr rrr7rrmkstempcloserrr rrrcopyfile)r@modifierdest_dirrrCrHrCrrrrrrBrrrrKZoriginal_versionr%modifiedcurrent_versionfdnewpathrrrvr4r4r5rB sX           z Wheel.update)rr)rXrYrZ__doc__rrrApropertyrmrxryrrrrvrrrrrrr+r.r9r:r;r@rArurBr4r4r4r5r[s2 )     h "   6r[cCstg}td}xGttjddddD](}|jdj|t|gq1Wg}xLtjD]>\}}}|j drp|j|j dddqpqpW|j t dkr|j dt n|jdg}tg}tjdkr=tjd t}|r=|j\} }}} t|}| g} | dkrg| jd n| dkr| jdn| dkr| jdn| dkr| jdn| dkr| jdnx`|dkr6x@| D]8} d| ||| f} | tkr|j| qqW|d8}qWq=nxH|D]@}x7|D]/} |jdjt|df|| fqQWqDWxwt|D]i\}}|jdjt|fddf|dkr|jdjt|dfddfqqWxwt|D]i\}}|jdjd|fddf|dkr|jdjd|dfddfqqWt|S)zG Return (pyver, abi, arch) tuples compatible with this Python. rrr.z.abir&r"r]darwinz(\w+)_(\d+)_(\d+)_(\w+)$i386ppcZfatx86_64Zfat3ppc64Zfat64intel universalz %s_%s_%s_%sr^r#rFrF)rVppc)rVr\rX)rYrX)rVrX)rVrXrZr\rY)r/rangerN version_infor1r2rrQ get_suffixesrrrsortrr<rplatformrerpgroupsr{ IMP_PREFIXrset)versionsmajorminorabisr r%rLZarchesr+rkrhmatchesrpr&rgr}rlr4r4r5compatible_tagsqs`  $&$               1% 0% 0rkcCst|tst|}nd}|dkr9t}nxN|D]F\}}}||jkr@||jkr@||jkr@d}Pq@q@W|S)NFT)rr[COMPATIBLE_TAGSrfrgrh)wheelryrLverrgrhr4r4r5r:s  -r:)P __future__rrrr3distutils.util distutilsemailrrrQr loggingr;rrbrrNrrr.rrcompatrrr r r Zdatabaser rr rutilrrrrrrrrrrlrr getLoggerrXrr-hasattrrdrarr0r/r^rer get_platformr:rrr6compile IGNORECASEVERBOSErsrorr<robjectr=r=r[rkrlr:r4r4r4r5sx               (@     '  #  >