B
    ãUvg}  ã               @   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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,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 e3�r^ddl6m7Z7m8Z8m9Z9 dZ:dZ;e <e=¡Z>d1dd„Z?dd„ Z@dd„ ZAe
 Bde
jC¡ZDdd „ ZEd!d"„ ZFd#d$„ ZGd2d'd(„ZHd)d*„ ZId+d,„ ZJG d-d.„ d.eKƒZLG d/d0„ d0eKƒZMdS )3zH
Support for installing and building the "wheel" binary package format.
é    )Úabsolute_importN)Úurlsafe_b64encode)ÚParser)Úpkg_resources)ÚScriptMaker)Úcanonicalize_name)ÚStringIO)Ú
pep425tags)Ú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   é   c          	   C   sr   t  ¡ }d}t| dƒ�2}x*t||d�D ]}|t|ƒ7 }| |¡ q&W W dQ R X dt| ¡ ƒ d¡ 	d¡ }||fS )z5Return (hash, length) for path using hashlib.sha256()r   Úrb)ÚsizeNzsha256=Úlatin1ú=)
ÚhashlibÚsha256Úopenr   ÚlenÚupdater   ÚdigestÚdecodeÚrstrip)ÚpathÚ	blocksizeÚhÚlengthÚfÚblockr(   © r1   ú4/tmp/pip-install-r_9ig3yj/pip/pip/_internal/wheel.pyÚrehash5   s    
r3   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Úbinr1   r1   r2   Úopen_for_csvC   s    r>   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Ú
startswithr8   Ú
executableÚencodeÚgetfilesystemencodingÚlinesepÚreadÚwrite)r+   ÚscriptÚ	firstlineÚexenameÚrestr1   r1   r2   Ú
fix_scriptM   s    

rO   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)ÚreplacerA   ÚlistdirÚdist_info_reÚmatchÚgroupr%   r+   ÚjoinÚlowerr*   )r:   ÚwheeldirÚname_foldedÚitemrV   ÚwheelÚliner1   r1   r2   Úroot_is_purelibc   s    

r_   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 '='ú r7   r"   )ÚstrrS   Úsplit)Úsr1   r1   r2   Ú	_split_ep‡   s    z"get_entrypoints.<locals>._split_epc             3   s   | ]}ˆ |ƒV  qd S )Nr1   )Ú.0Úv)rg   r1   r2   ú	<genexpr>�   s    z"get_entrypoints.<locals>.<genexpr>c             3   s   | ]}ˆ |ƒV  qd S )Nr1   )rh   ri   )rg   r1   r2   rj   Ž   s    )rA   r+   Úexistsr%   r   rJ   ÚstripÚseekr   Ú
EntryPointÚ	parse_mapÚgetÚdictÚvalues)ÚfilenameÚfpÚdatar^   Úentry_pointsÚconsoleÚguir1   )rg   r2   Úget_entrypointss   s    

ry   c       	         sR  | sdS t  t¡}x2| D ]*}tj |¡}tj |¡}||  |¡ qW dd„ tj 	d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�r8| | 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 |¡ t j¡‘qS r1   )rA   r+   Únormcaser*   Úsep)rh   Úir1   r1   r2   ú
<listcomp>¥   s    z5message_about_scripts_not_on_PATH.<locals>.<listcomp>ÚPATHr7   c                s&   i | ]\}}t j |¡ˆ kr||“qS r1   )rA   r+   rz   )rh   Ú
parent_dirÚscripts)Únot_warn_dirsr1   r2   ú
<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 directoriesr`   )ÚcollectionsÚdefaultdictÚsetrA   r+   ÚdirnameÚbasenameÚaddÚenvironrp   re   ÚpathsepÚappendrz   r8   rE   ÚitemsÚsortedr&   ÚformatrX   )	r€   Úgrouped_by_dirÚdestfiler   Úscript_nameÚwarn_forÚ	msg_linesÚ
start_textÚlast_line_fmtr1   )r�   r2   Ú!message_about_scripts_not_on_PATH’   s:    


 r—   FTc       -   
      sD  |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- /|%¡}'g }(xZ|&D ]R})ˆ |)d |)d ¡|)d< |)d ˆ k�r˜t0|)d ƒ\|)d< |)d2< |( +t1|)ƒ¡ �qVW x0|D ](}*t0|*ƒ\}+},|( +ˆ|*ˆƒ|+|,f¡ �q²W x"ˆD ]}*|( +ˆ|* ddf¡ �qäW xt2|(ƒD ]})|' 3|)¡ �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ú/)rA   r+   ÚrelpathrS   r{   )ÚsrcÚpr1   r1   r2   Ú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¦   rZ   r1   r2   Ú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j |¡�rPt |¡ t ||¡ t |¡}ttdƒ�r†t ||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.datar7   z
.dist-infoz!Multiple .dist-info directories: z, ÚutimeF)r   rA   Úwalkr&   Úlstripr+   r{   rX   re   ÚendswithrŒ   r   rD   r:   ÚAssertionErrorrk   ÚunlinkÚ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Údestdirrf   Ú
destsubdirr/   r§   r‘   ÚstÚpermissionsr«   )Ú	data_dirsÚinfo_dirr®   Úreqr1   r2   Úclobberþ   sN    








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)rY   r²   )r:   Ú	matchname)rw   rx   r1   r2   Úis_entrypoint_wrapperL  s    z/move_wheel_files.<locals>.is_entrypoint_wrapperr€   )rÅ   rÆ   r7   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œ   re   )Úentry)ÚmakerrÑ   r1   r2   Ú_get_script_textz  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   r4   c             S   s   g | ]}t  d |¡r|‘qS )zpip(\d(\.\d)?)?$)ÚrerV   )rh   Úkr1   r1   r2   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â   rV   )rh   rã   r1   r1   r2   r}   Ï  s    c             S   s   g | ]}d | ‘qS )z%s = %sr1   )rh   Úkvr1   r1   r2   r}   ×  s    c             S   s   g | ]}d | ‘qS )z%s = %sr1   )rh   rå   r1   r1   r2   r}   ã  s    rx   Ú	INSTALLERzINSTALLER.pipr@   s   pip
ÚRECORDz
RECORD.pipÚrzw+é   )F)NN)4r   r_   r*   rA   r+   r{   r†   r   ÚwarningsÚcatch_warningsÚfilterwarningsÚ
compileallÚcompile_dirÚloggerÚdebugÚgetvaluer³   rX   ry   rT   rO   r   rÒ   ÚvariantsÚset_moderÞ   rÛ   ÚpoprŠ   ÚextendÚmakerp   r8   Úversionr&   Úmake_multipler�   r—   Úwarningr%   rJ   rµ   ÚmoverŒ   r>   ÚcsvÚreaderÚwriterr3   ÚtuplerŽ   Úwriterow)-r:   rÑ   rZ   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ý   ÚoutrowsÚrowr/   r(   r.   r1   )r«   rw   rÏ   rx   rÐ   r¬   r­   rÝ   r¦   r®   rÑ   rZ   r2   Úmove_wheel_filesÏ   sÖ    




$F


#










$r  c             C   sn   yTdd„ t  d| ¡D ƒd }| d¡}tƒ  |¡}|d  ¡ }ttt| 	d¡ƒƒ}|S  t
k
rh   dS X 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 r1   r1   )rh   Údr1   r1   r2   r}     s    z!wheel_version.<locals>.<listcomp>Nr   rR   zWheel-VersionrÖ   F)r   Úfind_on_pathÚget_metadatar   Úparsestrrl   rþ   ÚmapÚintre   Ú	Exception)Ú
source_dirÚdistÚ
wheel_datar÷   r1   r1   r2   Ú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_COMPATIBLErX   r  rd   rï   rù   )r÷   r:   r1   r1   r2   Ú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:   rQ   rP   ÚverÚbuildÚpyverrÖ   ÚabiÚplatc                s.   h | ]&}ˆ j D ]}ˆ jD ]}|||f’qqqS r1   )ÚabisÚplats)rh   ÚxÚyÚz)Úselfr1   r2   ú	<setcomp>W  s   z!Wheel.__init__.<locals>.<setcomp>N)Úwheel_file_rerV   r   rs   rW   rS   r:   r÷   Ú	build_tagre   Ú
pyversionsr,  r-  Ú	file_tags)r1  rs   Ú
wheel_infor1   )r1  r2   Ú__init__C  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 r1   )Úindex)rh   Úc)Útagsr1   r2   r}   e  s    z+Wheel.support_index_min.<locals>.<listcomp>)r	   Úget_supportedr6  Úmin)r1  r;  Úindexesr1   )r;  r2   Úsupport_index_min\  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†   Úintersectionr6  )r1  r;  r1   r1   r2   Ú	supportedh  s    zWheel.supported)N)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__râ   ÚcompileÚVERBOSEr3  r8  r?  rB  r1   r1   r1   r2   r&  7  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)r1  rJ  rK  rL  rO  rP  rQ  r1   r1   r2   r8  r  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)r1  rÑ   Ú
output_dirrR  r1   r1   r2   Ú
_build_one~  s    zWheelBuilder._build_onec          	   C   s’   t dd��~}| j||j|d�rzyFt |j¡d }tj ||¡}t tj |j|¡|¡ t 	d|¡ |S  t
k
rx   Y nX |  |¡ d S Q R X d S )Nr]   )Úkind)rR  r   zStored in directory: %s)r   Ú_WheelBuilder__build_oner+   rA   rT   rX   rµ   rú   rï   Úinfor  Ú
_clean_one)r1  rÑ   rU  rR  Útemp_dirÚ
wheel_nameÚ
wheel_pathr1   r1   r2   rT  ˆ  s    
z"WheelBuilder._build_one_inside_envc             C   s   t jddt|j gt| jƒ S )Nz-uz-c)r8   rE   r   Úsetup_pyÚlistrP  )r1  rÑ   r1   r1   r2   Ú_base_setup_args™  s    
zWheelBuilder._base_setup_argsc          	   C   s¦   |   |¡}d|jf }t|ƒ�~}t d|¡ |dd|g | j }|d k	rT|d|g7 }yt||jd|d� dS  tk
r–   | 	d	¡ t 
d
|j¡ dS X 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)r`  r:   r   rï   rð   rO  r   Úsetup_py_dirr  Úfinishre  )r1  rÑ   ÚtempdrR  Ú	base_argsÚspin_messagerd  Ú
wheel_argsr1   r1   r2   Ú__build_one£  s    



zWheelBuilder.__build_onec             C   s`   |   |¡}t d|j¡ |ddg }yt||jdd� dS  tk
rZ   t d|j¡ dS X d S )NzRunning setup.py clean for %sÚcleanz--allF)rb  rc  Tz Failed cleaning build dir for %s)r`  rï   rY  r:   r   r   r  re  )r1  rÑ   ri  Ú
clean_argsr1   r1   r2   rZ  ¸  s    
zWheelBuilder._clean_onec             C   sê  ddl m} ddlm} | jp(|o(| jj}|s2t‚g }| jj	}xÊ|D ]Â}	|	j
rPqD|	jrj|sht d|	j¡ qD|rv|	jrvqD|r‚|	js‚qD|r¤|	jr¤|	jjs¤| |	df¡ qDd}
|rø|	j}| ¡ \}}| |d|¡dkrÔd}
d| t|	jƒ¡krøt d	|	j¡ qD| |	|
f¡ qDW |�sdS t d
d dd„ |D ƒ¡¡ | j}tƒ ��V g g  }}�xB|D �]8\}	}d}|�rÞtj}|�r€| |	j¡}n| |	j¡}yt|ƒ W nB tk
�rÚ } z"t  d|	j|¡ | |	¡ �wRW dd}~X Y nX n| j}| j!|	||d�}|�r€| |	¡ |�rŠ|	j�r4t"j# $t"j# |	jt%¡¡�s4tdƒ‚|	 &¡  |	 '| j(j)¡|	_|t*|ƒƒ|	_|	jj�sht‚t+|	j|	jdd|d� n
| |	¡ �qRW 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   )r9  )ÚLinkz(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 r1   )r:   )rh   rÑ   rQ   r1   r1   r2   r}   û  s    z&WheelBuilder.build.<locals>.<listcomp>z Building wheel for %s failed: %s)rR  zbad source dir - missing marker)ÚsessionzSuccessfully built %src   c             S   s   g | ]
}|j ‘qS r1   )r:   )rh   rÑ   r1   r1   r2   r}   7  s    zFailed to build %sc             S   s   g | ]
}|j ‘qS r1   )r:   )rh   rÑ   r1   r1   r2   r}   <  s    )-Úpip._internalr9  Úpip._internal.models.linkro  rN  rL  Ú	cache_dirr³   rJ  Úformat_controlÚ
constraintÚis_wheelrï   rY  r:   Úeditabler   ÚlinkÚis_artifactrŒ   ÚsplitextÚegg_info_matchesÚget_allowed_formatsr   rX   r   r	   Úimplementation_tagÚget_ephem_path_for_linkÚget_path_for_linkr   ÚOSErrorrù   rV  rA   r+   rk   r   Úremove_temporary_sourceÚbuild_locationrK  Ú	build_dirr
   r   r&   )r1  Úrequirementsrq  Úautobuildingr9  ro  Úbuilding_is_possibleÚbuildsetru  rÑ   Úephem_cachery  ÚbaseÚextÚ_cacheÚbuild_successÚbuild_failureÚephemrR  rU  ÚeÚ
wheel_filer1   r1   r2   r(  Ä  s¨    








zWheelBuilder.build)NNF)N)N)N)F)rC  rD  rE  rF  r8  rV  rT  r`  rX  rZ  r(  r1   r1   r1   r2   rI  o  s   





rI  )r   )FNNTNFNT)NrF  Ú
__future__r   r„   rí   rû   r#   ÚloggingÚos.pathrA   râ   rµ   r·   r8   rê   Úbase64r   Úemail.parserr   Úpip._vendorr   Úpip._vendor.distlib.scriptsr   Úpip._vendor.packaging.utilsr   Zpip._vendor.sixr   rr  r	   Ú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$  Ú	getLoggerrC  rï   r3   r>   rO   rG  rH  rU   r_   ry   r—   r  r#  r%  Úobjectr&  rI  r1   r1   r1   r2   Ú<module>   sd   



=  
  88