B
    =)H[ß|  ã               @   s  d Z 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Zddl	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 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddl m!Z!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 e6�rrddl9m:Z:m;Z;m<Z< dZ=dZ>e ?e@¡ZAd3dd„ZBdd„ ZCdd„ ZDe Ed ejF¡ZGd!d"„ ZHd#d$„ ZId%d&„ ZJd4d)d*„ZKd+d,„ ZLd-d.„ ZMG d/d0„ d0eNƒZOG d1d2„ d2eNƒZPdS )5zH
Support for installing and building the "wheel" binary package format.
é    )Úabsolute_importN)Úurlsafe_b64encode)ÚParser)Úpkg_resources)ÚScriptMaker)Úcanonicalize_name)ÚStringIO)Ú
pep425tags)ÚBuildEnvironment)Úpath_to_urlÚ
unpack_url)ÚInstallationErrorÚInvalidWheelFilenameÚUnsupportedWheel)ÚPIP_DELETE_MARKER_FILENAMEÚdistutils_scheme)Ú
indent_log)Úcall_subprocessÚcaptured_stdoutÚ
ensure_dirÚread_chunks)ÚSETUPTOOLS_SHIM)ÚTempDirectory)ÚMYPY_CHECK_RUNNING)Úopen_spinner)ÚDictÚListÚOptionalz.whl)é   r   Úsha256é   c          	   C   st   t  |¡}d}t| dƒ�2}x*t||d�D ]}|t|ƒ7 }| |¡ q(W W dQ R X dt| ¡ ƒ d¡ 	d¡ }||fS )z6Return (hash, length) for path using hashlib.new(algo)r   Úrb)ÚsizeNzsha256=Úlatin1ú=)
ÚhashlibÚnewÚopenr   ÚlenÚupdater   ÚdigestÚdecodeÚrstrip)ÚpathÚalgoÚ	blocksizeÚhÚlengthÚfÚblockr*   © r4   úTC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\pip\pip\_internal\wheel.pyÚrehash7   s    

r6   c             C   s6   t jd dk ri }d}nddi}d}t| || f|ŽS )Nr   é   ÚbÚnewlineÚ )ÚsysÚversion_infor'   )ÚnameÚmodeÚnlÚbinr4   r4   r5   Úopen_for_csvE   s    rA   c          	   C   s–   t j | ¡r’t| dƒ�H}| ¡ }| d¡s.dS tj t 	¡ ¡}d| t j
 d¡ }| ¡ }W dQ R X t| dƒ�}| |¡ | |¡ W dQ R X dS dS )	zLReplace #!python with #!/path/to/python
    Return True if file was changed.r!   s   #!pythonFs   #!ÚasciiNÚwbT)Úosr-   Úisfiler'   ÚreadlineÚ
startswithr;   Ú
executableÚencodeÚgetfilesystemencodingÚlinesepÚreadÚwrite)r-   ÚscriptÚ	firstlineÚexenameÚrestr4   r4   r5   Ú
fix_scriptO   s    

rR   zX^(?P<namever>(?P<name>.+?)(-(?P<ver>.+?))?)
                                \.dist-info$c          
   C   s†   |   dd¡}xtt |¡D ]f}t |¡}|r| d¡|krttj ||d¡ƒ�,}x$|D ]}| 	¡  
¡ }|dkrTdS qTW W dQ R X qW dS )	zP
    Return True if the extracted wheel in wheeldir should go into purelib.
    ú-Ú_r=   ÚWHEELzroot-is-purelib: trueTNF)ÚreplacerD   ÚlistdirÚdist_info_reÚmatchÚgroupr'   r-   ÚjoinÚlowerr,   )r=   ÚwheeldirÚname_foldedÚitemrY   ÚwheelÚliner4   r4   r5   Úroot_is_purelibe   s    

rb   c          	      sÆ   t j | ¡si i fS t| ƒ�<}tƒ }x$|D ]}| | ¡ ¡ | d¡ q*W | d¡ W d Q R X tj	 
|¡}| di ¡}| di ¡}dd„ ‰ t‡ fdd„| ¡ D ƒƒ}t‡ fd	d„| ¡ D ƒƒ}||fS )
NÚ
r   Úconsole_scriptsÚgui_scriptsc             S   s   t | ƒ dd¡ d¡S )zRget the string representation of EntryPoint, remove space and split
        on '='ú r:   r$   )ÚstrrV   Úsplit)Úsr4   r4   r5   Ú	_split_ep‰   s    z"get_entrypoints.<locals>._split_epc             3   s   | ]}ˆ |ƒV  qd S )Nr4   )Ú.0Úv)rj   r4   r5   ú	<genexpr>�   s    z"get_entrypoints.<locals>.<genexpr>c             3   s   | ]}ˆ |ƒV  qd S )Nr4   )rk   rl   )rj   r4   r5   rm   �   s    )rD   r-   Úexistsr'   r   rM   ÚstripÚseekr   Ú
EntryPointÚ	parse_mapÚgetÚdictÚvalues)ÚfilenameÚfpÚdatara   Úentry_pointsÚconsoleÚguir4   )rj   r5   Úget_entrypointsu   s    

r|   c       	         sN  | sdS t  t¡}x2| D ]*}tj |¡}tj |¡}||  |¡ qW dd„ tjd  	tj
¡D ƒ‰ ˆ  tj tj tj¡¡¡ ‡ fdd„| ¡ D ƒ}|sœdS g }xn| ¡ D ]b\}} t| ƒ} t| ƒdkrÖd | d	 ¡}n$d
 d | dd… ¡d | d  ¡}| d ||¡¡ qªW d}t|ƒdk�r4| | d¡¡ n| | d¡¡ d |¡S )zžDetermine if any scripts are not on PATH and format a warning.

    Returns a warning message if one or more scripts are not on PATH,
    otherwise None.
    Nc             S   s   g | ]}t j |¡‘qS r4   )rD   r-   Únormcase)rk   Úir4   r4   r5   ú
<listcomp>§   s    z5message_about_scripts_not_on_PATH.<locals>.<listcomp>ÚPATHc                s&   i | ]\}}t j |¡ˆ kr||“qS r4   )rD   r-   r}   )rk   Ú
parent_dirÚscripts)Únot_warn_dirsr4   r5   ú
<dictcomp>¬   s   z5message_about_scripts_not_on_PATH.<locals>.<dictcomp>r   zscript {} isr   zscripts {} arez, éÿÿÿÿz and z.The {} installed in '{}' which is not on PATH.zeConsider adding {} to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.zthis directoryzthese directoriesrc   )ÚcollectionsÚdefaultdictÚsetrD   r-   ÚdirnameÚbasenameÚaddÚenvironrh   ÚpathsepÚappendr}   r;   rH   ÚitemsÚsortedr(   Úformatr[   )	r‚   Úgrouped_by_dirÚdestfiler�   Úscript_nameÚwarn_forÚ	msg_linesÚ
start_textÚlast_line_fmtr4   )rƒ   r5   Ú!message_about_scripts_not_on_PATH”   s8    


 r™   FTc       ,   
      s  |st | |||||	d�}t| ˆƒr,|d ‰n|d ‰g ‰g ‰ˆ tjj¡tjj }i ‰tƒ ‰ g }|r²tƒ �4}t 	¡ �  t 
d¡ tj|ddd� W dQ R X W dQ R X t | ¡ ¡ dd	„ ‰d3‡ ‡‡‡‡fdd„	‰	d4‡‡‡	‡
fdd„	}||ˆdƒ ˆ�stdˆ
 ƒ‚tj ˆd d¡}t|ƒ\‰‰‡‡fdd„}xvˆD ]n}d}d}x^t tj ˆ|¡¡D ]F}d}|dk�rpt}|}tj ˆ||¡}|| }|||d
||d� �qVW �q4W td|d ƒ‰dˆ_dhˆ_dˆ_‡‡
fdd„}|ˆ_dˆ_ˆ dd¡}|�rœdtjk�rd| }| ˆ |¡¡ tj dd¡dk�rRdt j!dd… |f }| ˆ |¡¡ dt j!dd … |f }| ˆ |¡¡ d!d"„ ˆD ƒ}x|D ]}ˆ|= �qŒW ˆ d#d¡}|�rdtjk�rÒd$| }| ˆ |¡¡ d%t j!dd … |f }| ˆ |¡¡ d&d"„ ˆD ƒ}x|D ]}ˆ|= �qW t"ˆƒdk�rnˆ #d'd"„ ˆ $¡ D ƒ¡}| |¡ |
�rnt%|ƒ}|dk	�rnt &|¡ t"ˆƒdk�r | ˆ #d(d"„ ˆ $¡ D ƒd)di¡¡ tj ˆd d*¡}tj ˆd d+¡} t'| d,ƒ�}!|! (d-¡ W dQ R X t) *| |¡ | +|¡ tj ˆd d.¡}"tj ˆd d/¡}#t,|"d0ƒ�Þ}$t,|#d1ƒ�È}%t- .|$¡}&t- /|%¡}'xV|&D ]N}(ˆ |(d |(d ¡|(d< |(d ˆ k�r’t0|(d ƒ\|(d< |(d2< |' 1|(¡ �qPW x0|D ](})t0|)ƒ\}*}+|' 1ˆ|)ˆƒ|*|+f¡ �q¨W x"ˆD ]})|' 1ˆ|) ddf¡ �qÚW W dQ R X W dQ R X t) *|#|"¡ dS )5zInstall a wheel)ÚuserÚhomeÚrootÚisolatedÚprefixÚpurelibÚplatlibÚignoreT)ÚforceÚquietNc             S   s   t j | |¡ t jjd¡S )Nú/)rD   r-   ÚrelpathrV   Úsep)ÚsrcÚpr4   r4   r5   Únormpathô   s    z"move_wheel_files.<locals>.normpathFc                s.   ˆ| ˆƒ}ˆ|ˆƒ}|ˆ|< |r*ˆ   |¡ dS )z6Map archive RECORD paths to installation RECORD paths.N)r‹   )Úsrcfiler“   ÚmodifiedÚoldpathÚnewpath)ÚchangedÚ	installedÚlib_dirr©   r]   r4   r5   Úrecord_installed÷   s
    

z*move_wheel_files.<locals>.record_installedc                sÖ  t |ƒ �xÆt | ¡D �]¶\}}}|t| ƒd …  tjj¡}tj ||¡}	|rj| tjjd¡d  	d¡rjqxŠ|D ]‚}
tj |||
¡}|r¨|dkr¨| 	d¡r¨ˆ  
|
¡ qpqp|rp|
 	d¡rpt|
ƒ tˆjƒ¡rpˆrètd| d d ˆ¡ ƒ‚ˆ 
|¡ qpW xÖ|D ]Î}|�r||ƒ�rqütj ||¡}tj |||¡}t |	ƒ t ||¡ t |¡}ttdƒ�rnt ||j|jf¡ t |tj¡�r¬t |¡}|jtjB tjB tjB }t ||¡ d	}|�r¾||ƒ}ˆ|||ƒ qüW qW d S )
Nr   r   z.datar:   z
.dist-infoz!Multiple .dist-info directories: z, ÚutimeF)r   rD   Úwalkr(   Úlstripr-   r¦   r[   rh   ÚendswithrŽ   r   rG   r=   ÚAssertionErrorÚshutilÚcopyfileÚstatÚhasattrr²   Úst_atimeÚst_mtimeÚaccessÚX_OKÚst_modeÚS_IXUSRÚS_IXGRPÚS_IXOTHÚchmod)ÚsourceÚdestÚis_baseÚfixerÚfilterÚdirÚsubdirsÚfilesÚbasedirÚdestdirri   Ú
destsubdirr2   rª   r“   ÚstÚpermissionsr®   )Ú	data_dirsÚinfo_dirr±   Úreqr4   r5   Úclobberÿ   sJ    






z!move_wheel_files.<locals>.clobberz!%s .dist-info directory not foundr   zentry_points.txtc                sh   |   ¡  d¡r| d d… }n<|   ¡  d¡r8| d d… }n |   ¡  d¡rT| d d… }n| }|ˆ kpf|ˆkS )Nz.exeéüÿÿÿz
-script.pyiöÿÿÿz.pya)r\   rµ   )r=   Ú	matchname)rz   r{   r4   r5   Úis_entrypoint_wrapperB  s    z/move_wheel_files.<locals>.is_entrypoint_wrapperr‚   )rÇ   rÈ   r:   c                s<   | j d krtd| ˆf ƒ‚ˆ j| j| j  d¡d | j dœ S )Nz­Invalid script entry point: %s for req: %s - A callable suffix is required. Cf https://packaging.python.org/en/latest/distributing.html#console-scripts for more information.Ú.r   )ÚmoduleÚimport_nameÚfunc)Úsuffixr   Úscript_templaterž   rh   )Úentry)ÚmakerrÓ   r4   r5   Ú_get_script_textp  s    
z*move_wheel_files.<locals>._get_script_textzÐ# -*- coding: utf-8 -*-
import re
import sys

from %(module)s import %(import_name)s

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(%(func)s())
ÚpipÚENSUREPIP_OPTIONSzpip = Ú
altinstallz
pip%s = %sr   r7   c             S   s   g | ]}t  d |¡r|‘qS )zpip(\d(\.\d)?)?$)ÚrerY   )rk   Úkr4   r4   r5   r   ¸  s    z$move_wheel_files.<locals>.<listcomp>Úeasy_installzeasy_install = zeasy_install-%s = %sc             S   s   g | ]}t  d |¡r|‘qS )zeasy_install(-\d\.\d)?$)rä   rY   )rk   rå   r4   r4   r5   r   Å  s    c             S   s   g | ]}d | ‘qS )z%s = %sr4   )rk   Úkvr4   r4   r5   r   Í  s    c             S   s   g | ]}d | ‘qS )z%s = %sr4   )rk   rç   r4   r4   r5   r   Ù  s    r{   Ú	INSTALLERzINSTALLER.piprC   s   pip
ÚRECORDz
RECORD.pipÚrzw+é   )F)NN)2r   rb   r,   rD   r-   r¦   rˆ   r   ÚwarningsÚcatch_warningsÚfilterwarningsÚ
compileallÚcompile_dirÚloggerÚdebugÚgetvaluer¶   r[   r|   rW   rR   r   rÔ   ÚvariantsÚset_moderà   rÝ   ÚpoprŒ   ÚextendÚmakers   r;   Úversionr(   Úmake_multipler�   r™   Úwarnr'   rM   r·   ÚmoverŽ   rA   ÚcsvÚreaderÚwriterr6   Úwriterow),r=   rÓ   r]   rš   r›   rœ   Ú	pycompileÚschemer�   rž   Úwarn_script_locationrÄ   Ú	generatedÚstdoutrÔ   Úep_filer×   ÚdatadirrÇ   rÈ   ÚsubdirrÅ   rà   Ú
pip_scriptÚspecÚpip_eprå   Úeasy_install_scriptÚeasy_install_epÚgenerated_console_scriptsÚmsgÚ	installerÚtemp_installerÚinstaller_fileÚrecordÚtemp_recordÚ	record_inÚ
record_outrþ   rÿ   Úrowr2   r0   Úlr4   )r®   rz   rÑ   r{   rÒ   r¯   r°   rß   r©   r±   rÓ   r]   r5   Úmove_wheel_filesÐ   sÐ    




$;


#










.r  c             C   sd   yTdd„ t  d| ¡D ƒd }| d¡}tƒ  |¡}|d  ¡ }ttt| 	d¡ƒƒ}|S    dS dS )	z†
    Return the Wheel-Version of an extracted wheel, if possible.

    Otherwise, return False if we couldn't parse / extract it.
    c             S   s   g | ]}|‘qS r4   r4   )rk   Údr4   r4   r5   r     s    z!wheel_version.<locals>.<listcomp>Nr   rU   zWheel-VersionrØ   F)
r   Úfind_on_pathÚget_metadatar   Úparsestrro   ÚtupleÚmapÚintrh   )Ú
source_dirÚdistÚ
wheel_datarù   r4   r4   r5   Úwheel_versionú  s    
r$  c             C   sb   | st d| ƒ‚| d td kr>t d|d tt| ƒ¡f ƒ‚n | tkr^t dd tt| ƒ¡¡ dS )aê  
    Raises errors or warns if called with an incompatible Wheel-Version.

    Pip should refuse to install a Wheel-Version that's a major series
    ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when
    installing a version only minor version ahead (e.g 1.2 > 1.1).

    version: a 2-tuple representing a Wheel-Version (Major, Minor)
    name: name of wheel or package to raise exception about

    :raises UnsupportedWheel: when an incompatible Wheel-Version is given
    z(%s is in an unsupported or invalid wheelr   zB%s's Wheel-Version (%s) is not compatible with this version of piprØ   z*Installing from a newer Wheel-Version (%s)N)r   ÚVERSION_COMPATIBLEr[   r  rg   rñ   Úwarning)rù   r=   r4   r4   r5   Úcheck_compatibility  s    
r'  c               @   s:   e Zd ZdZe dej¡Zdd„ Zd
dd„Z	ddd	„Z
dS )ÚWheelzA wheel filez�^(?P<namever>(?P<name>.+?)-(?P<ver>.*?))
        ((-(?P<build>\d[^-]*?))?-(?P<pyver>.+?)-(?P<abi>.+?)-(?P<plat>.+?)
        \.whl|\.dist-info)$c                s¦   ˆ j  |¡}|std| ƒ‚|ˆ _| d¡ dd¡ˆ _| d¡ dd¡ˆ _| d¡ˆ _| d¡ 	d¡ˆ _
| d	¡ 	d¡ˆ _| d
¡ 	d¡ˆ _‡ fdd„ˆ j
D ƒˆ _dS )zX
        :raises InvalidWheelFilename: when the filename is invalid for a wheel
        z!%s is not a valid wheel filename.r=   rT   rS   ÚverÚbuildÚpyverrØ   ÚabiÚplatc                s.   h | ]&}ˆ j D ]}ˆ jD ]}|||f’qqqS r4   )ÚabisÚplats)rk   ÚxÚyÚz)Úselfr4   r5   ú	<setcomp>J  s   z!Wheel.__init__.<locals>.<setcomp>N)Úwheel_file_rerY   r   rv   rZ   rV   r=   rù   Ú	build_tagrh   Ú
pyversionsr.  r/  Ú	file_tags)r3  rv   Ú
wheel_infor4   )r3  r5   Ú__init__6  s    

zWheel.__init__Nc                s4   ˆ dkrt  ¡ ‰ ‡ fdd„| jD ƒ}|r0t|ƒS dS )a"  
        Return the lowest index that one of the wheel's file_tag combinations
        achieves in the supported_tags list e.g. if there are 8 supported tags,
        and one of the file tags is first in the list, then return 0.  Returns
        None is the wheel is not supported.
        Nc                s   g | ]}|ˆ krˆ   |¡‘qS r4   )Úindex)rk   Úc)Útagsr4   r5   r   X  s    z+Wheel.support_index_min.<locals>.<listcomp>)r	   Úget_supportedr8  Úmin)r3  r=  Úindexesr4   )r=  r5   Úsupport_index_minO  s    zWheel.support_index_minc             C   s$   |dkrt  ¡ }tt|ƒ | j¡ƒS )z'Is this wheel supported on this system?N)r	   r>  Úboolrˆ   Úintersectionr8  )r3  r=  r4   r4   r5   Ú	supported[  s    zWheel.supported)N)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rä   ÚcompileÚVERBOSEr5  r:  rA  rD  r4   r4   r4   r5   r(  *  s   
r(  c               @   sR   e Zd ZdZddd„Zddd„Zddd	„Zd
d„ Zddd„Zdd„ Z	ddd„Z
dS )ÚWheelBuilderz#Build wheels from a RequirementSet.NFc             C   s8   || _ || _|| _|j| _|p g | _|p*g | _|| _d S )N)ÚfinderÚpreparerÚwheel_cacheÚwheel_download_dirÚ
_wheel_dirÚbuild_optionsÚglobal_optionsÚno_clean)r3  rL  rM  rN  rQ  rR  rS  r4   r4   r5   r:  e  s    

zWheelBuilder.__init__c          	   C   s"   |j � | j|||d�S Q R X dS )ziBuild one wheel.

        :return: The filename of the built wheel, or None if the build failed.
        )Ú
python_tagN)Ú	build_envÚ_build_one_inside_env)r3  rÓ   Ú
output_dirrT  r4   r4   r5   Ú
_build_oneq  s    zWheelBuilder._build_onec          	   C   sŠ   t dd��v}| j||j|d�rryFt |j¡d }tj ||¡}t tj |j|¡|¡ t 	d|¡ |S    Y nX |  
|¡ d S Q R X d S )Nr`   )Úkind)rT  r   zStored in directory: %s)r   Ú_WheelBuilder__build_oner-   rD   rW   r[   r·   rü   rñ   ÚinfoÚ
_clean_one)r3  rÓ   rW  rT  Útemp_dirÚ
wheel_nameÚ
wheel_pathr4   r4   r5   rV  {  s    
z"WheelBuilder._build_one_inside_envc             C   s   t jddt|j gt| jƒ S )Nz-uz-c)r;   rH   r   Úsetup_pyÚlistrR  )r3  rÓ   r4   r4   r5   Ú_base_setup_argsŒ  s    
zWheelBuilder._base_setup_argsc          	   C   sœ   |   |¡}d|jf }t|ƒ�t}t d|¡ |dd|g | j }|d k	rT|d|g7 }yt||jd|d� dS    | d	¡ t 	d
|j¡ dS W d Q R X d S )Nz#Running setup.py bdist_wheel for %szDestination directory: %sÚbdist_wheelz-dz--python-tagF)ÚcwdÚshow_stdoutÚspinnerTÚerrorzFailed building wheel for %s)
rb  r=   r   rñ   rò   rQ  r   Úsetup_py_dirÚfinishrg  )r3  rÓ   ÚtempdrT  Ú	base_argsÚspin_messagerf  Ú
wheel_argsr4   r4   r5   Ú__build_one–  s    



zWheelBuilder.__build_onec             C   sV   |   |¡}t d|j¡ |ddg }yt||jdd� dS    t d|j¡ dS d S )NzRunning setup.py clean for %sÚcleanz--allF)rd  re  Tz Failed cleaning build dir for %s)rb  rñ   r[  r=   r   r!  rg  )r3  rÓ   rk  Ú
clean_argsr4   r4   r5   r\  «  s    
zWheelBuilder._clean_onec             C   sÞ  ddl m} | jp|o| jj}|s&t‚g }xÐ|D ]È}|jr<q0|jrV|søt 	d|j
¡ q0|rb|jrbq0|rn|jsnq0|r�|jr�|jjs�| |df¡ q0d}|rê|j}	|	 ¡ \}
}| |
d|	¡dkrÀd}d| | jjt|j
ƒ¡krêt 	d|j
¡ q0| ||f¡ q0W |�sdS t 	d	d
 dd„ |D ƒ¡¡ | j}tƒ ��X g g  }}�xD|D �]:\}}d}|�rÐtj}|�rr| |j¡}n| |j¡}yt|ƒ W nB tk
�rÌ } z"t d|j
|¡ | |¡ �wDW dd}~X Y nX n| j}| j|||d�}|�rt| |¡ |�r~|j�r&t j! "t j! |jt#¡¡�s&tdƒ‚| $¡  | %| j&j'¡|_| (t)|ƒ¡|_|jj�s\t‚t*|j|jdd|d� n
| |¡ �qDW W dQ R X |�r°t 	dd dd„ |D ƒ¡¡ |�rÒt 	dd dd„ |D ƒ¡¡ t+|ƒdkS )zÙBuild wheels.

        :param unpack: If True, replace the sdist we built from with the
            newly built wheel, in preparation for installation.
        :return: True if all the wheels built correctly.
        r   )r;  z(Skipping %s, due to already being wheel.TFNÚbinaryzCSkipping bdist_wheel for %s, due to binaries being disabled for it.z*Building wheels for collected packages: %sz, c             S   s   g | ]\}}|j ‘qS r4   )r=   )rk   rÓ   rT   r4   r4   r5   r   í  s    z&WheelBuilder.build.<locals>.<listcomp>z Building wheel for %s failed: %s)rT  zbad source dir - missing marker)ÚsessionzSuccessfully built %srf   c             S   s   g | ]
}|j ‘qS r4   )r=   )rk   rÓ   r4   r4   r5   r   )  s    zFailed to build %sc             S   s   g | ]
}|j ‘qS r4   )r=   )rk   rÓ   r4   r4   r5   r   .  s    ),Úpip._internalr;  rP  rN  Ú	cache_dirr¶   Ú
constraintÚis_wheelrñ   r[  r=   Úeditabler!  ÚlinkÚis_artifactrŽ   ÚsplitextÚegg_info_matchesÚfmt_ctl_formatsrL  Úformat_controlr   r[   r   r	   Úimplementation_tagÚget_ephem_path_for_linkÚget_path_for_linkr   ÚOSErrorr&  rX  rD   r-   rn   r   Úremove_temporary_sourceÚbuild_locationrM  Ú	build_dirÚLinkr   r   r(   )r3  Úrequirementsrr  Úautobuildingr;  Úbuilding_is_possibleÚbuildsetrÓ   Úephem_cacherx  ÚbaseÚextÚ_cacheÚbuild_successÚbuild_failureÚephemrT  rW  ÚeÚ
wheel_filer4   r4   r5   r*  ·  s¦    








zWheelBuilder.build)NNF)N)N)N)F)rE  rF  rG  rH  r:  rX  rV  rb  rZ  r\  r*  r4   r4   r4   r5   rK  b  s   





rK  )r   r    )FNNTNFNT)QrH  Ú
__future__r   r†   rï   Úcopyrý   r%   ÚloggingÚos.pathrD   rä   r·   r¹   r;   rì   Úbase64r   Úemail.parserr   Úpip._vendorr   Úpip._vendor.distlib.scriptsr   Úpip._vendor.packaging.utilsr   Úpip._vendor.sixr   rs  r	   Úpip._internal.build_envr
   Úpip._internal.downloadr   r   Úpip._internal.exceptionsr   r   r   Úpip._internal.locationsr   r   Úpip._internal.utils.loggingr   Úpip._internal.utils.miscr   r   r   r   Ú$pip._internal.utils.setuptools_buildr   Úpip._internal.utils.temp_dirr   Úpip._internal.utils.typingr   Úpip._internal.utils.uir   Útypingr   r   r   Ú	wheel_extr%  Ú	getLoggerrE  rñ   r6   rA   rR   rI  rJ  rX   rb   r|   r™   r  r$  r'  Úobjectr(  rK  r4   r4   r4   r5   Ú<module>   sh   



<  
  *8