
 XMG                @   sn  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 m Z d  d l m Z m Z m Z m Z m Z d  d l m Z m Z m Z m Z m Z m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d	 l m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% m& Z& m' Z' m( Z( m) Z) m* Z* m+ Z+ m, Z, m- Z- m. Z. m/ Z/ m0 Z0 d  d
 l1 m2 Z2 m3 Z3 m4 Z4 m5 Z5 m6 Z6 m7 Z7 m8 Z8 m9 Z9 d  d l: m; Z; d  d l m< Z< d  d l= m> Z> m? Z? m@ Z@ mA ZA mB ZB mC ZC mD ZD mE ZE mF ZF mG ZG mH ZH d  d lI ZJ d  d lI mK ZK mL ZL mM ZM d  d lN ZN d  d lO ZO d d   ZP Gd d   d eQ  ZR Gd d   d eQ  ZS Gd d   d eQ  ZT d d   ZU e jV d e jW  ZX d d d d d d  ZY d d   ZZ d d   Z[ d  d!   Z\ d d" d#  Z] Gd$ d%   d% eQ  Z^ Gd& d'   d' eQ  Z_ Gd( d)   d) eQ  Z` d S)*    )
FeedParserN)change_root)bin_pyrunning_under_virtualenvPIP_DELETE_MARKER_FILENAMEwrite_delete_marker_filebin_user)InstallationErrorUninstallationErrorUnsupportedWheelBestVersionAlreadyInstalledInvalidWheelFilenameDistributionNotFoundPreviousBuildDirError)vcs)logger)r   )display_pathrmtreeaskask_path_exists
backup_diris_installable_diris_localdist_is_localdist_in_usersitedist_in_site_packagesrenamesnormalize_pathegg_link_pathmake_path_relativecall_subprocessis_prereleasenormalize_name)urlparseurllibuses_pycacheConfigParserstring_types	HTTPErrorget_python_versionb)Link)build_prefix)
PipSessionget_file_contentis_urlurl_to_pathpath_to_urlis_archive_fileunpack_vcs_link
is_vcs_urlis_file_urlunpack_file_urlunpack_http_url)move_wheel_filesWheel	wheel_extc             C   s   t  |  d   } | j   } Wd QXd t j d  d g } x: | D]2 } y | j |  } Wn t k
 rs wC Yn XPqC Wt |  t k s t  | S)aQ  Return the contents of *filename*.

    Try to decode the file contents with utf-8, the preffered system encoding
    (e.g., cp1252 on some Windows machines) and latin1, in that order. Decoding
    a byte string with latin1 will never raise an error. In the worst case, the
    returned string will contain some garbage characters.

    rbNzutf-8Flatin1)	openreadlocalegetpreferredencodingdecodeUnicodeDecodeErrortypebytesAssertionError)filenamefpdata	encodingsenc rK   2/home/ubuntu/projects/ifolica/build/pip/pip/req.pyread_text_file(   s    	rM   c               @   se  e  Z d  Z d d d d d d d d d d d 	 Z e d d d d   Z e d d d d	   Z d
 d   Z d d   Z d d d  Z	 d d   Z
 e d d    Z e d d    Z e d d    Z d d d  Z d Z d d   Z d d   Z d d    Z d! d"   Z e d# d$    Z e j d%  Z f  d& d'  Z e d( d)    Z e d* d+    Z d, d-   Z d d. d/  Z d d0 d1  Z d2 d3   Z d4 d5   Z  d6 d7   Z! d8 d9   Z" f  d d: d;  Z# d< d=   Z$ f  d> d?  Z% d@ dA   Z& dB dC   Z' e dD dE    Z( e dF dG    Z) dH dI   Z* dJ dK   Z+ d dL dM  Z, e dN dO    Z- d S)PInstallRequirementNFTc             C   sL  f  |  _  t | t  r9 t j j |  } | j  |  _  n  | |  _ | |  _ | |  _ | |  _	 |	 d  k rr i  }	 n  |	 |  _
 | |  _ | |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ | |  _ d  |  _ d  |  _ d |  _ d  |  _ |
 |  _ | |  _ | rd |  _ n= |  j d  k	 r?t d d   |  j j D  |  _ n	 d |  _ d  S)NFTc             S   s0   g  |  ]& } t  | d   o) | d d k  q S)   r   z!=)r!   ).0xrK   rK   rL   
<listcomp>m   s   	 z/InstallRequirement.__init__.<locals>.<listcomp>)extras
isinstancer'   pkg_resourcesRequirementparsereq
comes_from
source_direditableeditable_optionsurlas_egg_egg_info_pathsatisfied_byconflicts_with_temp_build_dir
_is_bundleupdateinstall_succeededuninstalleduse_user_site
target_dirfrom_bundle	pycompileprereleasesanyspecs)selfrX   rY   rZ   r[   r]   r^   rd   rk   r\   ri   rj   rK   rK   rL   __init__B   s<    																					%zInstallRequirement.__init__c       	      C   s   t  | |  \ } } } | j d  r6 t |  } n d  } |  | | d | d d d | d | d d } | d  k	 r | | _ n  | S)Nzfile:rZ   r[   Tr]   r\   rk   )parse_editable
startswithr0   rS   )	clseditable_reqrY   default_vcsnamer]   extras_overriderZ   resrK   rK   rL   from_editableq   s    	z InstallRequirement.from_editablec       	      C   s  d } | j    } d } t j j t j j |   } d } t |  rW t |  } n t j j |  r t j j | k s | j	 d  r t
 |  s t d |   n  t t |   } nF t |  rt j j |  s t j d |  n  t t |   } n  | r| d k r| j } | j } | j d k rst j d |  rst t j j t j j | j    } n  | j t k rt | j  } | j   st d | j   qqn | } |  | | d | d	 | S)
zCreates an InstallRequirement from a name, which might be a
        requirement, directory containing 'setup.py', filename, or URL.
        N.z;Directory %r is not installable. File 'setup.py' not found.zARequirement %r looks like a filename, but the file does not existfilez\.\./z-%s is not a supported wheel on this platform.r]   rk   )stripospathnormpathabspathr/   r+   isdirseprq   r   r	   r1   r2   isfiler   warnurl_without_fragmentegg_fragmentschemeresearchextr:   r9   rF   	supportedr   )	rr   ru   rY   rk   r]   rX   r}   linkwheelrK   rK   rL   	from_line   s4    3		!*zInstallRequirement.from_linec             C   s   |  j  r8 t |  j   } |  j rA | d |  j 7} qA n	 |  j } |  j d  k	 rm | d t |  j j  7} n  |  j r t |  j t  r |  j } n |  j j	   } | r | d | 7} q n  | S)Nz from %sz in %sz
 (from %s))
rX   strr]   r`   r   locationrY   rT   r'   	from_path)rn   srY   rK   rK   rL   __str__   s    				zInstallRequirement.__str__c             C   sv   |  j  d  k r d  St |  j   } |  j rr t |  j t  rI |  j } n |  j j   } | rr | d | 7} qr n  | S)Nz->)rX   r   rY   rT   r'   r   )rn   r   rY   rK   rK   rL   r      s    	zInstallRequirement.from_pathc             C   s   |  j  d  k	 r |  j  S|  j d  k rJ t j d d  |  _  | |  _ |  j  S|  j re |  j j   } n	 |  j } t j	 j
 |  s t |  n  t j	 j | |  S)Nz-buildzpip-)rb   rX   tempfilemkdtemp_ideal_build_dirr[   ru   lowerr|   r}   exists_make_build_dirjoin)rn   	build_dirunpackru   rK   rK   rL   build_location   s    			z!InstallRequirement.build_locationc             C   s8  |  j  d k	 r d S|  j d k	 s( t  |  j s7 t  |  j } |  j } |  ` |  j rj |  j j   } n	 |  j } t j	 j
 | |  } t j	 j |  s t j d |  t |  n  t j	 j |  r t d t |    n  t j d |  t |  t |  f  t j | |  | |  _ | |  _  d |  _ d S)zkIf the build location was a temporary directory, this will move it
        to a new more permanent locationNzCreating directory %sz<A package already exists in %s; please remove it to continuez,Moving package %s from %s to new location %s)rZ   rX   rE   rb   r   r[   ru   r   r|   r}   r   r   r   debugr   r	   r   shutilmover_   )rn   old_locationnew_build_dirru   new_locationrK   rK   rL   correct_build_location   s0    							z)InstallRequirement.correct_build_locationc             C   s   |  j  d  k r d  S|  j  j S)N)rX   project_name)rn   rK   rK   rL   ru      s    zInstallRequirement.namec             C   s&   |  j  d  k r d  St j |  j  j  S)N)rX   r$   quoteunsafe_name)rn   rK   rK   rL   url_name  s    zInstallRequirement.url_namec             C   s   y d d  l  } Wn t k
 r0 t d   Yn Xd } |  j rt d |  j k rt t j j |  j |  j d |  } n t j j |  j |  } t j	 r t
 | t j  r | j t j    } n  | S)Nr   zBsetuptools must be installed to install from a source distributionzsetup.pysubdirectory)
setuptoolsImportErrorr	   r\   r|   r}   r   rZ   sixPY2rT   	text_typeencodesysgetfilesystemencoding)rn   r   
setup_filesetup_pyrK   rK   rL   r     s    
zInstallRequirement.setup_pyc             C   s  |  j  s t  |  j r8 t j d |  j |  j f  n t j d |  j |  j f  t j d 7_ z>|  j d k r t j	 j
 t j	 j |  j  d   r t t j	 j |  j  d   n  |  j } | j d t |  j   } | j d t |  j   } t j d	 | d
 g } |  j s| r&g  } nF t j	 j |  j  d  } t j	 j |  s`t j |  n  d d g } t | | d |  j  d |  j d d d t j d d Wd  t j d 8_ X|  j st j j d |  j    |  _ |  j   n  d  S)Nz2Running setup.py (path:%s) egg_info for package %sz7Running setup.py (path:%s) egg_info for package from %s   
distributer   zdistribute.egg-info__SETUP_PY____PKG_NAME__z-cegg_infozpip-egg-infoz
--egg-basecwdfilter_stdoutshow_stdoutFcommand_levelcommand_desczpython setup.py egg_infoz%(Name)s==%(Version)s)rZ   rE   ru   r   notifyr   r]   indentr|   r}   r   r   r   _run_setup_pyreplacereprr   
executabler[   r   makedirsr    _filter_installVERBOSE_DEBUGrX   rU   rV   rW   pkg_infor   )rn   force_root_egg_infoscriptegg_info_cmdegg_base_optionegg_info_dirrK   rK   rL   run_egg_info"  s8    	 	4		
			zInstallRequirement.run_egg_infoa}  
__file__ = __SETUP_PY__
from setuptools.command import egg_info
import pkg_resources
import os
import tokenize
def replacement_run(self):
    self.mkpath(self.egg_info)
    installer = self.distribution.fetch_build_egg
    for ep in pkg_resources.iter_entry_points('egg_info.writers'):
        # require=False is the change we're making:
        writer = ep.load(require=False)
        if writer:
            writer(self, ep.name, os.path.join(self.egg_info,ep.name))
    self.find_sources()
egg_info.egg_info.run = replacement_run
exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))
c             C   sy   |  j  d  k	 r5 |  j  j |  s% d  S|  j  j |  S|  j sD t  |  j |  } t j j |  si d  St	 |  } | S)N)
r`   has_metadataget_metadatarZ   rE   egg_info_pathr|   r}   r   rM   )rn   rF   rH   rK   rK   rL   egg_info_datac  s    z InstallRequirement.egg_info_datac                s  |  j  d  k r|  j r$ |  j } n t j j |  j d  } t j |  } |  j rg  } xt j |  D] \   } } x- t j	 D]" } | | k r | j
 |  q q Wx t |  D] } t j j t j j   | d d   s
t j j t j j   | d d   r| j
 |  n  | d k s2| d k r | j
 |  q q W| j   f d d	   | D  qj Wd
 d	   | D } n  | st d | | f   n  | st d | | f   t |  d k r| j d d d    n  t j j | | d  |  _  n  t j j |  j  |  S)Nzpip-egg-infobinpythonScriptsz
Python.exetesttestsc                s%   g  |  ] } t  j j   |   q SrK   )r|   r}   r   )rP   dir)rootrK   rL   rR     s   	z4InstallRequirement.egg_info_path.<locals>.<listcomp>c             S   s%   g  |  ] } | j  d   r |  q S)z	.egg-info)endswith)rP   frK   rK   rL   rR     s   	 z$No files/directories in %s (from %s)rO   keyc             S   s8   |  j  t j j  t j j r3 |  j  t j j  p6 d S)Nr   )countr|   r}   r   altsep)rQ   rK   rK   rL   <lambda>  s   z2InstallRequirement.egg_info_path.<locals>.<lambda>r   )r_   r[   rZ   r|   r}   r   listdirwalkr   dirnamesremovelistr   extendr	   rE   lensort)rn   rF   base	filenamesdirsfilesr   rK   )r   rL   r   o  s6    		''z InstallRequirement.egg_info_pathc             C   so   |  j  |  } | s g  Sg  } xI | j   D]; } | j   } | s, | j d  rZ q, n  | j |  q, W| S)N#)r   
splitlinesr{   rq   append)rn   rF   rH   resultlinerK   rK   rL   egg_info_lines  s    z!InstallRequirement.egg_info_linesc             C   s^   t    } |  j d  } | sA t j d t |  j d    n  | j | pP d  | j   S)NzPKG-INFOzNo PKG-INFO file found in %s )r   r   r   r   r   r   feedclose)rn   prH   rK   rK   rL   r     s    	#zInstallRequirement.pkg_infoc             C   s   |  j  d  S)Nzdependency_links.txt)r   )rn   rK   rK   rL   dependency_links  s    z#InstallRequirement.dependency_linksz	\[(.*?)\]c             c   s   d  } xx |  j  d  D]g } |  j j | j    } | rO | j d  } q n  | rx | | k rx t j d |  q n  | Vq Wd  S)Nzrequires.txtrO   zskipping extra %s)r   _requirements_section_rematchr   groupr   r   )rn   rS   in_extrar   r   rK   rK   rL   requirements  s    zInstallRequirement.requirementsc             c   s5   x. |  j  j D]  \ } } | d k r | Vq q Wd  S)Nz==)rX   rm   )rn   	qualifierversionrK   rK   rL   absolute_versions  s    z$InstallRequirement.absolute_versionsc             C   s   |  j    d S)Nr   )r   )rn   rK   rK   rL   installed_version  s    z$InstallRequirement.installed_versionc             C   sk   |  j  s t  |  j } | |  j k rD t j d |  |  j f  n# t j d t |  j   | |  f  d  S)Nz'Requested %s, but installing version %sz;Source in %s has version %s, which satisfies requirement %s)rZ   rE   r   rX   r   r   r   r   )rn   r   rK   rK   rL   assert_source_matches_version  s    		z0InstallRequirement.assert_source_matches_versionc             C   s  |  j  s! t j d |  j  d  S|  j s0 t  |  j s? t  |  j  j d  rU d  Sd |  j  k sw t d |  j    |  j s d  S|  j  j d d  \ } } t	 j
 |  } | r | |  j   } | r | j |  j  q| j |  j  n d st d |  j  | f   d  S)Nz>Cannot update repository at %s; repository location is unknownzfile:+zbad url: %rrO   r   z+Unexpected version control type (in %s): %s)r]   r   inforZ   r[   rE   rq   rd   splitr   get_backendobtainexport)rn   r  vc_typer]   backendvcs_backendrK   rK   rL   update_editable  s(    	"		z"InstallRequirement.update_editablec                sq  |  j    s% t d |  j f   n  |  j p4 |  j } t |  } t j j | j	 | j
   j d  d  d } t j j | j	 d j | j
   j d  d d    d } | j d	 t j d
  } | j
   d } t |  } t j j |  }	 t j j |  }
 t j j |  } |	 s'|
 r_|	 r6| } n | } | j |  | j d  rx| j d  j   D]4 } t j j t j j | |   } | j |  qnWq| j d  r| j d  r| j d    n g    xz   f d d   | j d  j   D D]M } t j j | j	 |  } | j |  | j | d  | j | d  qWqn?| j	 j |  r| j | j	  t j j t j j | j	  d  } | j | d |  n | rkt | d  } t j j | j   j    } | j   | | j	 k s't d | |  j | j	 f   | j |  t j j t j j |  d  } | j | | j	  n3 | rx* t j  j! |  D] } | j |  qWn  | j d  rB| j" d  rBx | j# d  D]o } t$ |  rt% } n t& } | j t j j | |   t' j( d k r| j t j j | |  d  qqWn  | j d  rWt) j*   } | j+ t, | j- d    | j. d  rWx | j/ d  D] \ } } t$ |  rt% } n t& } | j t j j | |   t' j( d k r| j t j j | |  d  | j t j j | |  d  | j t j j | |  d  qqWqWn  | j0 |  | |  _1 d S)a  
        Uninstall the distribution currently satisfying this requirement.

        Prompts before removing or modifying files unless
        ``auto_confirm`` is True.

        Refuses to delete or modify files outside of ``sys.prefix`` -
        thus uninstallation within a virtual environment can only
        modify that virtual environment, even if the virtualenv is
        linked to global site-packages.

        z.Cannot uninstall requirement %s, not installedz-pyr   z	.egg-info-Nr   z
.dist-infoz-py%sr   z.eggzinstalled-files.txtztop_level.txtznamespace_packages.txtc                s(   g  |  ] } | r |   k r |  q SrK   rK   )rP   r   )
namespacesrK   rL   rR     s   	 z0InstallRequirement.uninstall.<locals>.<listcomp>z.pyz.pyczeasy-install.pthz./rz;Egg-link %s does not match installed location of %s (at %s)scriptswin32z.batzentry_points.txtconsole_scriptsz.exez.exe.manifestz
-script.py)2check_if_existsr
   ru   r`   ra   UninstallPathSetr|   r}   r   r   egg_namer  r   rU   PY_MAJORr   r   addr   r   r   r~   r   dirnameadd_pthr=   normcasereadliner{   r   rE   pipr   uninstallation_pathsmetadata_isdirmetadata_listdirr   r   r   r   platformr&   SafeConfigParserreadfpFakeFileget_metadata_lineshas_sectionitemsr   rf   )rn   auto_confirmdistpaths_to_removepip_egg_info_pathdist_info_pathdebian_egg_info_patheasy_install_eggdevelop_egg_linkpip_egg_info_existsdebian_egg_info_existsdist_info_existsr   installed_filer}   top_level_pkgeasy_install_pthfhlink_pointerr   bin_dirconfigru   valuerK   )r
  rL   	uninstall  s     (	!	
.		*	  -zInstallRequirement.uninstallc             C   s4   |  j  r |  j  j   n t j d |  j f  d  S)Nz'Can't rollback %s, nothing uninstalled.)rf   rollbackr   errorr   )rn   rK   rK   rL   rollback_uninstallZ  s    		z%InstallRequirement.rollback_uninstallc             C   s4   |  j  r |  j  j   n t j d |  j f  d  S)Nz%Can't commit %s, nothing uninstalled.)rf   commitr   r8  r   )rn   rK   rK   rL   commit_uninstalla  s    		z#InstallRequirement.commit_uninstallc             C   s  |  j  s t  d } d |  j |  j f } t j j | |  } t j j |  rt d t	 |  d  } | d k r d } q| d k r t
 j d t	 |   t j |  q| d k rt |  } t
 j d	 t	 |  t	 |  f  t j | |  qn  | rt j | d t j  } t j j t j j |  j    } xt j |  D] \ }	 }
 } d
 |
 k r~|
 j d
  n  xl |
 D]d } t j j |	 |  } |  j | |  } t j |  j d | d  } d | _ | j | d  qWxb | D]Z } | t k rqn  t j j |	 |  } |  j | |  } | j | |  j d |  qWqSW| j   t
 j d 8_ t
 j d t	 |   n  d  S)NTz	%s-%s.zipz/The file %s exists. (i)gnore, (w)ipe, (b)ackup iwr*   FzDeleting %szBacking up %s to %szpip-egg-info/i     r   r   zSaved %s)r<  r=  r*   i  )rZ   rE   ru   r   r|   r}   r   r   r   r   r   r   r   r   r   r   zipfileZipFileZIP_DEFLATEDr  r   r   _clean_zip_nameZipInfoexternal_attrwritestrr   writer   r   r   )rn   r   create_archivearchive_namearchive_pathresponse	dest_filezipr   dirpathr   r   r  ru   zipdirrF   rK   rK   rL   archiveh  sN    		!	#
zInstallRequirement.archivec             C   se   | j  | t j j  s/ t d | | f   | t |  d d   } | j t j j d  } | S)Nz$name %r doesn't start with prefix %rrO   r>  )rq   r|   r}   r   rE   r   r   )rn   ru   prefixrK   rK   rL   rC    s
    z"InstallRequirement._clean_zip_namec                s  |  j  r |  j | |  d  S|  j rt t j j |  j  } t j j | |  j  |  j	 |  j d   d |  _
 d  St j d d  } t j j | d  } zt j g } | j d  | j d |  j  | t |  d d	 | g 7} |  j s| d
 g 7} n    d  k	 r | d   g 7} n  |  j r9| d g 7} n | d g 7} t   r| d t j j t j d d d t    g 7} n  t j d |  j  t j d 7_ z* t | | d |  j d |  j d d Wd  t j d 8_ Xt j j |  st j d |  d  Sd |  _
 |  j rd  S  f d d   } t  |  }	 xN |	 D]1 }
 |
 j!   }
 |
 j" d  rC| |
  } PqCqCWt j# d |   d  S|	 j$   g  } t  |  }	 x[ |	 D]S }
 |
 j!   } t j j% |  r| t j j& 7} n  | j t' | |  |   qW|	 j$   t  t j j | d  d  }	 |	 j( d j |  d  |	 j$   Wd  t j j |  ryt j) |  n  t j* |  Xd  S) Nr   Tz-recordzpip-zinstall-record.txtz-czimport setuptools, tokenize;__file__=%r;exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))installz--recordz#--single-version-externally-managedz--rootz	--compilez--no-compilez--install-headersincludesiter   zRunning setup.py install for %sr   r   r   r   FzRecord file %s not foundc                s4     d  k s t  j j |   r# |  St   |   Sd  S)N)r|   r}   isabsr   )r}   )r   rK   rL   prepend_root  s    z0InstallRequirement.install.<locals>.prepend_rootz	.egg-infoz;Could not find .egg-info directory in install record for %szinstalled-files.txtr=  
)+r[   install_editableis_wheelr  r   wheel_versionrZ   check_compatibilityru   r8   re   r   r   r|   r}   r   r   r   r   r   r   r^   rj   r   rQ  r)   r   r   r   r    r   r   r=   r{   r   r   r   r   r   r   rG  r   rmdir)rn   install_optionsglobal_optionsr   r   temp_locationrecord_filenameinstall_argsrV  r   r   r   	new_linesrF   rK   )r   rL   rR    s    								
 
zInstallRequirement.installc             C   s   |  j  s t j j |  j  rW t j d |  j  |  j rK t |  j  n  d |  _ n  |  j	 r t j j |  j	  r t |  j	  n  d |  _	 d S)zVRemove the source files from this requirement, if they are marked
        for deletionzRemoving source in %sN)
	is_bundler|   r}   r   delete_marker_filenamer   r   rZ   r   rb   )rn   rK   rK   rL   remove_temporary_source  s    	z*InstallRequirement.remove_temporary_sourcec             C   s   t  j d |  j  t  j d 7_ zW t t j d d |  j g t |  d d g t |  d |  j	 d |  j
 d	 d
 Wd  t  j d 8_ Xd |  _ d  S)NzRunning setup.py develop for %sr   z-czimport setuptools, tokenize; __file__=%r; exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))developz	--no-depsr   r   r   FT)r   r   ru   r   r    r   r   r   r   rZ   r   re   )rn   r]  r^  rK   rK   rL   rX    s    7z#InstallRequirement.install_editablec             C   sa   t  j } xK d d d d d d d d g D]+ } t j | | j    r( t  j } Pq( q( W| | f S)	Nz^running .*z^writing .*z^creating .*z^[Cc]opying .*z^reading .*z4^removing .*\.egg-info' \(and everything under it\)$z^byte-compiling z7^warning: manifest_maker: standard file '-c' not found$)r   NOTIFYr   r   r{   INFO)rn   r   levelregexrK   rK   rL   r     s    		z"InstallRequirement._filter_installc             C   s  |  j  d k r d SyJ |  j  j d k rG |  j rG |  j j d k rG d St j |  j   |  _ Wn t j k
 rx d SYn t j k
 rt j |  j  j  } |  j r t	 |  r | |  _ q t
   r t |  r t d | j | j f   q n	 | |  _ Yn Xd S)zFind an installed distribution that satisfies or conflicts
        with this requirement, and set self.satisfied_by or
        self.conflicts_with appropriately.NFr   r   TzVWill not install to the user site because it will lack sys.path precedence to %s in %s)rX   r   ra   rU   get_distributionr`   r   VersionConflictrg   r   r   r   r	   r   )rn   existing_distrK   rK   rL   r    s(    		z"InstallRequirement.check_if_existsc             C   s   |  j  o d |  j  k S)Nz.whl)r]   )rn   rK   rK   rL   rY  :  s    zInstallRequirement.is_wheelc             C   su   |  j  d  k	 r |  j  S|  j } | s) d St j j t j j | d   ph t j j t j j | d   |  _  |  j  S)NFzpip-manifest.txtzpyinstall-manifest.txt)rc   rb   r|   r}   r   r   )rn   r   rK   rK   rL   rc  >  s    	!$zInstallRequirement.is_bundlec       
      c   sG  x |  j  D] } t j j |  } x t j D] } d  } } t j j | | j  } t j j |  r, | j	 } t
 |  } | j   }	 | j   |   j |	  \ } } Pq, q, W| r d | | | f } n d  } t | |  d d d | d d d | d d Vq
 Wx= |  j D]2 } t j j |  } t | |  d | d d VqWd  S)	Nz%s+%s@%sr[   Tr]   rd   FrZ   ri   )_bundle_editable_dirsr|   r}   basenamer   backendsr   bundle_filer   ru   r=   r>   r   parse_vcs_bundle_filerN   _bundle_build_dirs)
rn   dest_dirpackager  r]   revvcs_bundle_filer  rG   contentrK   rK   rL   bundle_requirementsJ  s,    
		
z&InstallRequirement.bundle_requirementsc             C   s  |  j  } | s t  t j j | d  } t j j | d  } g  } g  } x#| | | f | | | f g D]\ } }	 }
 t j j |  rj x t j |  D] } t j j |	 |  } |
 j |  t j j |  r t j	 d | | |  f  q n  t j j |	  s(t j
 d |	  t j |	  n  t j t j j | |  |  q Wt j |  smt j |  qmqj qj Wd  |  _  | |  _ | |  _ d  S)NsrcbuildzZThe directory %s (containing package %s) already exists; cannot move source from bundle %szCreating directory %s)rb   rE   r|   r}   r   r   r   r   r   r   r   r   r   r   r\  rs  rn  )rn   dest_build_dirdest_src_dirr   src_dirr   bundle_build_dirsbundle_editable_dirsrZ   rt  dir_collectionr  destrK   rK   rL   move_bundle_filesd  s4    		#		z$InstallRequirement.move_bundle_filesc             C   s;   t  |  j |  j | d |  j d |  j d | d |  j d  S)Nuserhomer   rj   )r8   ru   rX   rg   rh   rj   )rn   wheeldirr   rK   rK   rL   r8     s    		z#InstallRequirement.move_wheel_filesc             C   s%   |  j  s t  t j j |  j  t  S)N)rZ   rE   r|   r}   r   r   )rn   rK   rK   rL   rd    s    z)InstallRequirement.delete_marker_filename).__name__
__module____qualname__ro   classmethodrx   r   r   r   r   r   propertyru   r   r   r   r   r   r   r   r   r   r   compiler   r   r   r   r   r  r6  r9  r;  rP  rC  rR  re  rX  r   r  rY  rc  ry  r  r8   rd  rK   rK   rK   rL   rN   @   sV   -*?*	n)Y!	rN   c               @   sd   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d S)Requirementsc             C   s   g  |  _  i  |  _ d  S)N)_keys_dict)rn   rK   rK   rL   ro     s    	zRequirements.__init__c             C   s   |  j  S)N)r  )rn   rK   rK   rL   keys  s    zRequirements.keysc                s     f d d     j  D S)Nc                s   g  |  ] }   j  |  q SrK   )r  )rP   r   )rn   rK   rL   rR     s   	 z'Requirements.values.<locals>.<listcomp>)r  )rn   rK   )rn   rL   values  s    zRequirements.valuesc             C   s   | |  j  k S)N)r  )rn   itemrK   rK   rL   __contains__  s    zRequirements.__contains__c             C   s3   | |  j  k r" |  j  j |  n  | |  j | <d  S)N)r  r   r  )rn   r   r5  rK   rK   rL   __setitem__  s    zRequirements.__setitem__c             C   s   |  j  | S)N)r  )rn   r   rK   rK   rL   __getitem__  s    zRequirements.__getitem__c                s0     f d d     j    D } d d j |  S)Nc                s0   g  |  ]& } d  t  |  t    |  f  q S)z%s: %s)r   )rP   k)rn   rK   rL   rR     s   	 z)Requirements.__repr__.<locals>.<listcomp>zRequirements({%s})z, )r  r   )rn   r  rK   )rn   rL   __repr__  s    zRequirements.__repr__N)
r  r  r  ro   r  r  r  r  r  r  rK   rK   rK   rL   r    s   r  c               @   sB  e  Z d  Z d d d d d d d d d d d d d  Z d d   Z d d	   Z d
 d   Z e d d    Z e d d    Z	 e d d    Z
 d d   Z d d d  Z d d   Z d d d d  Z d d d  Z d d   Z d d   Z d d d  d!  Z f  d" d#  Z d$ d%   Z d& Z d' d(   Z d) d*   Z d S)+RequirementSetNFTc             C   s   | |  _  | |  _ | |  _ | r6 t j j |  } n  | |  _ | |  _ | |  _ |
 |  _	 t
   |  _ i  |  _ g  |  _ |	 |  _ g  |  _ g  |  _ g  |  _ | |  _ | |  _ | |  _ | p t   |  _ | |  _ | |  _ d  S)N)r   r~  download_dirr|   r}   
expanduserdownload_cacheupgradeignore_installedforce_reinstallr  r   requirement_aliasesunnamed_requirementsignore_dependenciessuccessfully_downloadedsuccessfully_installedreqs_to_cleanupr^   rg   rh   r-   sessionrj   wheel_download_dir)rn   r   r~  r  r  r  r  r^   rh   r  r  rg   r  rj   r  rK   rK   rL   ro     s,    																	zRequirementSet.__init__c             C   sL   d d   |  j  j   D } | j d d d    d j d d   | D  S)Nc             S   s   g  |  ] } | j  s |  q SrK   )rY   )rP   rX   rK   rK   rL   rR     s   	 z*RequirementSet.__str__.<locals>.<listcomp>r   c             S   s   |  j  j   S)N)ru   r   )rX   rK   rK   rL   r     s    z(RequirementSet.__str__.<locals>.<lambda> c             S   s   g  |  ] } t  | j   q SrK   )r   rX   )rP   rX   rK   rK   rL   rR     s   	 )r   r  r   r   )rn   reqsrK   rK   rL   r     s    zRequirementSet.__str__c             C   s   | j  } |  j | _ |  j | _ |  j | _ |  j | _ | sR |  j j |  ni |  j |  r t d | |  j	 |  | f   n  | |  j
 | <| j   | k r | |  j | j   <n  d  S)Nz5Double requirement given: %s (already in %s, name=%r))ru   r^   rg   rh   rj   r  r   has_requirementr	   get_requirementr   r   r  )rn   install_reqru   rK   rK   rL   add_requirement  s    	zRequirementSet.add_requirementc             C   sC   x< | | j    f D]( } | |  j k s7 | |  j k r d Sq Wd S)NTF)r   r   r  )rn   r   ru   rK   rK   rL   r    s    zRequirementSet.has_requirementc             C   s   t  |  j j    p |  j S)N)r   r   r  r  )rn   rK   rK   rL   has_requirements  s    zRequirementSet.has_requirementsc             C   sJ   t  d d   |  j j   D  r& d St  d d   |  j D  rF d Sd S)Nc             s   s   |  ] } | j  Vq d  S)N)r[   )rP   rX   rK   rK   rL   	<genexpr>  s    z/RequirementSet.has_editables.<locals>.<genexpr>Tc             s   s   |  ] } | j  Vq d  S)N)r[   )rP   rX   rK   rK   rL   r    s    F)rl   r   r  r  )rn   rK   rK   rL   has_editables  s
    "zRequirementSet.has_editablesc             C   sg   |  j  rc t j j |  j   |  _  t j j |  j   r: d St j d  t d t |  j     n  d S)NTz!Could not find download directoryz0Could not find or access download directory '%s'F)	r  r|   r}   r  r   r   fatalr	   r   )rn   rK   rK   rL   is_download  s    	zRequirementSet.is_downloadc             C   sl   xU | | j    f D]A } | |  j k r3 |  j | S| |  j k r |  j |  j | Sq Wt d |   d  S)NzNo project with the name %r)r   r   r  KeyError)rn   r   ru   rK   rK   rL   r    s    zRequirementSet.get_requirementc             C   s8   x1 |  j  j   D]  } | j d |  | j   q Wd  S)Nr#  )r   r  r6  r;  )rn   r#  rX   rK   rK   rL   r6  
  s    zRequirementSet.uninstallc             C   s  t  |  j  } t  |  j j    } xc| s3 | r| rK | j d  } n | j d  } d } |  j r | j r | j   | j r |  j	 r |  j
 o t | j  s | j | _ n  d  | _ q d } n  | j r t j d |  q n  | j r | j d  k rE| j |  j  | _ qEn% | rE| j |  j |  j  | _ n  | j d  k	 r' t j j | j  r' t d | | j f   q' q' Wd  S)Nr   TFz<Requirement already satisfied (use --upgrade to upgrade): %szCould not install requirement %s because source folder %s does not exist (perhaps --no-download was used without first running an equivalent install with --no-install?))r   r  r   r  popr  r[   r  r`   r  rg   r   ra   r   r   rZ   r   r~  r   r  r|   r}   r   r	   )rn   unnamedr  req_to_installinstall_neededrK   rK   rL   locate_files  s4    
						%zRequirementSet.locate_filesc          (   C   s  t  |  j  } t  |  j j    } x| s3 | r| rK | j d  } n | j d  } d } d } d }	 |  j r| j r| j   | j r`|  j	 rW|  j
 r| j ry | j | |  j	  }
 Wn? t k
 r d } d } Yqt k
 r
t j   d }	 YqX|
 j | _ n  | s]|  j o6t | j  sH| j | _ n  d | _ q]q`d } n  | j r| rt j d |  qt j d |  qn  | j rt j d |  n^ | r| j r| j j   j d	  rt j d
 t t | j    qt j d |  n  t j d 7_ zld } d } | j r| j d k ri| j |  j  } | | _ n	 | j } t j j  |  j!  st" |  j!  n  | j# |  j$  |  j$ r| j%   | j& |  j'  q1| j%   nV| r1| j |  j! |  j$  } d } d }
 | j( rnWt j j  t j j) | d   rUt* t+ j, d | | f    n| j d k r|	 rs|	  n  | j | d |  j	 }
 n t- | j  }
 |
 st.  |
 rcyY |
 j/ j0 t1  r|  j2 r|  j2 } d } n |  j' } |  j$ } |  j3 |
 | | |  Wqit4 k
 r_} z5 t j5 d | | f  t6 d | | |
 f   WYd d } ~ XqiXn d } | r1| j7 } |
 o|
 j/ j0 t1  } | r| j8 |  j! |  j  x | j9   D]  } | j: |  |  j; |  qWn |  j$ r3| | _ | s| j%   n  |
 r|
 j< t= j> k r| j& |  j'  qny | rQ| | _ |
 j | _ n[ | | _ | j%   | r}| j% d d  n  | j?   | r| j r|  j@ |  d } n  |  j s| j   n  | j r.|  j	 s|  j r|  j ot | j  s| j | _ n  d | _ q+t j d |  d } q.q1n  | rt  tA jB |   d } | jC sx| jD   | _C |  j; |  n  |  jE sxd | jF | jG  D]M } |  jH | jI  rqn  tJ tK |  |  } | j: |  |  j; |  qWqn&| s| jL | jM  | jG r*t j d d j) | jG   n  |  jE sx | j | jG  D] } y tA jN jO |  jI } Wn? tP k
 rt j   d } t jQ d | | | f  wFYn X|  jH |  rqFn  tJ | |  } | j: |  |  j; |  qFWn  |  jH | jR  s|  j; |  qn  | sE|  j$ s/| jS d k	 rE|  jT j: |  qEn  | r|  jU j: |  | r| j r| j j d  r|  j@ |  qn  Wd t j d 8_ Xq' Wd S)zGPrepare process. Create temp directories, download and/or unpack files.r   TFNrO   z"Requirement already up-to-date: %sz<Requirement already satisfied (use --upgrade to upgrade): %szObtaining %szfile:zUnpacking %szDownloading/unpacking %sr   zsetup.pya  
                          pip can't proceed with requirement '%s' due to a pre-existing build directory.
                           location: %s
                          This is likely due to a previous installation that failed.
                          pip is being responsible and not assuming it can delete this.
                          Please delete it and try again.
                        r  z4Could not install requirement %s because of error %szDCould not install requirement %s because of HTTP error %s for URL %sr   z!Installing extra requirements: %r,z.Invalid requirement: %r (%s) in requirement %szfile:///)Vr   r  r   r  r  r  r[   r  r`   r  r  r]   find_requirementr   r   r   exc_inforg   r   ra   r   r   r   rq   r   r0   r   rZ   r   r~  r|   r}   r   r   r   r  r  r   rP  r  ri   r   r   textwrapdedentr+   rE   rF   r   r:   r  
unpack_urlr(   r  r	   rc  r  ry  r   r  r   r   all_schemesr   copy_to_build_dirrU   find_distributionsrX   as_requirementr  requiresrS   r  r   rN   r   add_dependency_linksr   rV   rW   
ValueErrorr8  ru   rb   r  r  )rn   finderr   bundler  r  r  rR  best_installed	not_foundr]   rc  rY  r   r   r  do_downloadexcesubreqr$  rX   ru   rK   rK   rL   prepare_files6  sV   
		
					!#			
	!								)					

								 		!zRequirementSet.prepare_filesc             C   s   t  j d  t  j d 7_ x |  j D] } | j   q& Wg  } |  j   r_ | j |  j  n  | rx | j |  j  n  x> | D]6 } t	 j
 j |  r t  j d |  t |  q q Wt  j d 8_ d S)zClean up files, remove builds.zCleaning up...r   zRemoving temporary dir %s...N)r   r   r   r  re  _pip_has_created_build_dirr   r   r~  r|   r}   r   r   r   )rn   r  rX   
remove_dirr   rK   rK   rL   cleanup_files#  s    zRequirementSet.cleanup_filesc             C   s1   |  j  t k o0 t j j t j j |  j  t   S)N)r   r,   r|   r}   r   r   r   )rn   rK   rK   rL   r  :  s    z)RequirementSet._pip_has_created_build_dirc             C   s   | j  r |  j p |  j } t j d | j | f  t j j | | j  } t	 j
 | j |  t d d | d g d | d d d  S)NzCopying %s to %sr   z%s/setup.pycleanr   r   zpython setup.py clean)r[   r~  r   r   r   ru   r|   r}   r   r   copytreerZ   r    )rn   r  rh   r  rK   rK   rL   r  >  s    z RequirementSet.copy_to_build_dirc             C   s   | d  k r |  j  } n  t |  rL | r3 | } n | } t | | |  na t |  r~ t | | |  | r t |  q n/ t | | |  j | |  j  | r t |  n  d  S)N)	r  r4   r3   r5   r6   r   r7   r  r  )rn   r   r   r  only_downloadlocrK   rK   rL   r  F  s&    	
zRequirementSet.unpack_urlc          "   O   s  d d   |  j  j   D } t j j d  } xI | D]A } | j d k r5 | j | k r5 | j |  | j |  q5 q5 W| r t	 j
 d d j d d   | D   n  t	 j d 7_ zCx<| D]4} | j d	 k r0y= t j j d
  }	 t j d  }
 |
 |	 k r|
 | _ n  Wq0t j k
 r,Yq0Xn  | j rt	 j
 d | j  t	 j d 7_ z | j d d  Wd t	 j d 8_ Xn  y | j | | | |  Wn+ | j r| j r| j   n    Yn  X| j r| j r| j   n  | j   q WWd t	 j d 8_ X| |  _ d S)zRInstall everything in this set (after having downloaded and unpacked the packages)c             S   s   g  |  ] } | j  s |  q SrK   )r`   )rP   r  rK   rK   rL   rR   g  s   	 z*RequirementSet.install.<locals>.<listcomp>zdistribute>=0.7r   z!Installing collected packages: %sz, c             S   s   g  |  ] } | j   q SrK   )ru   )rP   rX   rK   rK   rL   rR   w  s   	 r   r   zdistribute<0.7zFound existing installation: %sr#  TN)r   r  rU   rV   rW   ru   r   r   r   r   r   r   r   rk  ra   r   r6  rR  re   r9  r;  re  r  )rn   r]  r^  argskwargs
to_installdistribute_reqrX   requirementdistribute_requirementexisting_distributerK   rK   rL   rR  e  sJ    	*		zRequirementSet.installc             C   s  t  j | d t  j  } g  } xJ|  j d f |  j d f f D]*\ } } t j j t j j |   } xt j	 |  D]\ } } } x t
 j D] }	 |	   }
 d  } } |
 j | k r xR | D] } | j |  r Pq q W|
 j t j j | |   \ } } | j |  |
 j } |
 j i | d 6| d 6} | j |
 j  Pq q Wd | k re| j d  n  xQ | D]I } t j j | |  } |  j | |  } | j | d | d d  qlWx_ | D]W } | t k rqn  t j j | |  } |  j | |  } | j | | d |  qW| rw t j j | |  } |  j | |  } | j | d | |  qw qw Wq= W| j d	 |  j    | j   d  S)
Nr=  r{  rz  r]   rv  zpip-egg-infor>  r   zpip-manifest.txt)r@  rA  rB  r   r~  r|   r}   r  r   r   r   rp  r  rq   get_infor   r   rq  guider   rC  rF  r   rG  ry  r   )rn   bundle_filenamerM  vcs_dirsr   ro  rN  r   r   r  r  vcs_urlvcs_revvcs_dirrw  	vcs_guider  ru   rF   rK   rK   rL   create_bundle  sL    +	
	 #zRequirementSet.create_bundlez# This is a pip bundle file, that contains many source packages
# that can be installed as a group.  You can install this like:
#     pip this_file.zip
# The rest of the file contains a list of all the packages included:
c             C   s   |  j  g } xA d d   |  j j   D D]# } | j d | j | j f  q) W| j d  xA d d   |  j j   D D]# } | j d | j | j f  qz Wd j |  S)Nc             S   s   g  |  ] } | j  s |  q SrK   )rY   )rP   rX   rK   rK   rL   rR     s   	 z6RequirementSet.bundle_requirements.<locals>.<listcomp>z%s==%s
zC# These packages were installed to satisfy the above requirements:
c             S   s   g  |  ] } | j  r |  q SrK   )rY   )rP   rX   rK   rK   rL   rR     s   	 r   )BUNDLE_HEADERr   r  r   ru   r   r   )rn   partsrX   rK   rK   rL   ry    s    #!#!z"RequirementSet.bundle_requirementsc             C   se   | j  | t j j  s/ t d | | f   | t |  d d   } | j t j j d  } | S)Nz$name %r doesn't start with prefix %rrO   r>  )rq   r|   r}   r   rE   r   r   )rn   ru   rQ  rK   rK   rL   rC    s
    zRequirementSet._clean_zip_name)r  r  r  ro   r   r  r  r  r  r  r  r  r6  r  r  r  r  r  r  rR  r  r  ry  rC  rK   rK   rK   rL   r    s2   		'E7r  c             C   s   t  j |   t |   d  S)N)r|   r   r   )r   rK   rK   rL   r     s    r   z^(http|https|file):c          
   c   s  | d  k r t    } n  d  } | r- | j n d  } | rK t j |  } n  t j j t j j |    } t |  d | d | \ }  } xzt	 | j
    D]f\ }	 }
 |	 d 7}	 |
 j   }
 t j d d |
  }
 |
 s |
 j d  r q n  | r| j |
  rq n  |
 j d  s&|
 j d  r|
 j d  rN|
 d	 d   j   } n% |
 t d  d   j   j d
  } t j |   rt j |  |  } n3 t j |  st j j t j j |   |  } n  x3t | | d |  d | d | D] } | VqWq |
 j d  s |
 j d  rq |
 j d  s=|
 j d  r|
 j d  re|
 d	 d   j   }
 n% |
 t d  d   j   j d
  }
 t j j | |
  } t j j |  r| }
 n  | r | j j |
  q q |
 j d  s|
 j d  rY|
 j d  r|
 d	 d   j   }
 n% |
 t d  d   j   j d
  }
 | r |
 g | _ q q |
 j d  r|
 t d  d   j   j d
  }
 | r | j j |
  q q |
 j d  rd | _ q |
 j d  rg  | _ q |
 j d  r:|
 t d  d   j   j d
  }
 | j t t |
  j   g  O_ q |
 j d  rUd | _ q |
 j d  rgq |
 j d  ryq |
 j d  r|
 t d  d   j   j d
  }
 | j  t t |
  j   g  O_  q |
 j d  r/|
 t d  d   j   j d
  }
 | j  t t |
  j   g  O_  q d |  |	 f } |
 j d  s]|
 j d  r|
 j d  r|
 d	 d   j   }
 n% |
 t d  d   j   j d
  }
 t! j" |
 d | d | r| j# n d  } n$ t! j$ |
 | d  t% | d! d   } | Vq Wd  S)"NrY   r  rO   z
(^|\s)#.*$r   r   z-rz--requirementr   =optionsz-Zz--always-unzipz-fz--find-linksz-iz--index-urlz--extra-index-urlz--use-wheelTz
--no-indexz--allow-externalz--allow-all-externalz--no-allow-externalz--no-allow-insecurez--allow-insecurez--allow-unverifiedz-r %s (line %s)z-ez
--editablert   rk   pre)&r-   skip_requirements_regexr   r  r|   r}   r  r   r.   	enumerater   r{   subrq   r   r   
_scheme_rer#   urljoinr   parse_requirementslstripr   
find_linksr   
index_urls	use_wheelallow_externalsetr"   r   allow_all_externalallow_unverifiedrN   rx   rt   r   getattr)rF   r  rY   r  r  
skip_match
skip_regexreqs_file_dirrx  line_numberr   req_urlr  relative_to_reqs_filerX   rK   rK   rL   r    s    	
%$(%	%%%'%'%'%'$r  c             C   s.   t  j d |   } | r* | j d  }  n  |  S)z2
        Strip req postfix ( -dev, 0.2, etc )
    z^(.*?)(?:-dev|-\d.*)$rO   )r   r   r   )rX   r   rK   rK   rL   _strip_postfixc  s    r  c             C   sp   d d   |  j  d d  d j  d  D } d  } | d d k rO | d } n | d d k rl | d } n  | S)Nc             S   s   g  |  ] } | r |  q SrK   rK   )rP   r   rK   rK   rL   rR   p  s   	 z'_build_req_from_url.<locals>.<listcomp>r   rO   r   r>  r   tagsbranchestagbranch   trunk)ztagszbranchesztagzbranchr  )r  )r]   r  rX   rK   rK   rL   _build_req_from_urln  s    ,r	  c             C   s{   t  j d  } | j |   } | rw t   } xC | D]; } | \ } } | | k re t d |   n  | | | <q4 W| Sd S)zz
        This method generates a dictionary of the query string
        parameters contained in a given editable URL.
    z([\?#&](?P<name>[^&=]+)=(?P<value>[^&=]+)z%s option already definedN)r   r  findalldict	Exception)rX   regexpmatchedretoptionru   r5  rK   rK   rL   _build_editable_optionsy  s    	r  c             C   sm  |  } d } t  j d |  } | rE | j d  } | j d  } n | } t j j |  r t j j t j j | d   s t d |   n  t	 |  } n  | j
   j d  r | r d | t j j d |  j f Sd | d f Sn  x; t D]3 } | j
   j d	 |  r d
 | | f } Pq q Wd | k r_| rL| d | } q_t d |    n  | j d d  d j
   } t j |  sd |  d j d d   t j D  d } t |   n  y t |   }	 Wn8 t k
 rt j   d }
 t d |  |
 f   Yn X|	 s"d |	 k rJt |   } | sTt d |    qTn
 |	 d } t |  } | | |	 f S)zSParses svn+http://blahblah@rev#egg=Foobar into a requirement
    (Foobar) and a URLNz^(.+)(\[[^\]]+\])$rO   r   zsetup.pyz;Directory %r is not installable. File 'setup.py' not found.zfile:__placeholder__z%s:z%s+%sr   zb%s should either be a path to a local project or a VCS url beginning with svn+, git+, hg+, or bzr+r   zFor --editable=%s only z, c             S   s   g  |  ] } | j  d   q S)z+URL)ru   )rP   r  rK   rK   rL   rR     s   	 z"parse_editable.<locals>.<listcomp>z is currently supportedz*--editable=%s error in editable options:%seggz@--editable=%s is not the right format; it must have #egg=Package)r   r   r   r|   r}   r   r   r   r	   r1   r   rq   rU   rV   rW   rS   r   r  r  rp  r  r  r   r  r	  r  )rs   rt   r]   rS   murl_no_extrasversion_controlr  error_messager  messagerX   ru  rK   rK   rL   rp     sT    ! $
rp   c               @   s   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d d d  Z d d   Z d d   Z d S)r  zMA set of file paths to be removed in the uninstallation of a
    requirement.c             C   s@   t    |  _ t    |  _ i  |  _ | |  _ d  |  _ g  |  _ d  S)N)r  paths_refusepthr$  save_dir_moved_paths)rn   r$  rK   rK   rL   ro     s    			zUninstallPathSet.__init__c             C   s
   t  |  S)zs
        Return True if the given path is one we are permitted to
        remove/modify, False otherwise.

        )r   )rn   r}   rK   rK   rL   
_permitted  s    zUninstallPathSet._permittedc             C   sa   t  |  j  s] t   r+ d t j f } n d } t j d |  j j t |  j j	  |  d Sd S)Nzoutside environment %szowned by OSzNot uninstalling %s at %s, %sFT)
r   r$  r   r   rQ  r   r   r   r   r   )rn   reasonrK   rK   rL   _can_uninstall  s    		zUninstallPathSet._can_uninstallc             C   s   t  |  } t j j |  s" d  S|  j |  rD |  j j |  n |  j j |  t j j |  d d k r t	 r |  j t
 j |   n  d  S)NrO   z.py)r   r|   r}   r   r  r  r  r  splitextr%   impcache_from_source)rn   r}   rK   rK   rL   r    s    "zUninstallPathSet.addc             C   sk   t  |  } |  j |  rW | |  j k r@ t |  |  j | <n  |  j | j |  n |  j j |  d  S)N)r   r  r  UninstallPthEntriesr  r  )rn   pth_fileentryrK   rK   rL   r    s    zUninstallPathSet.add_pthc                sY   t    } xI t | d t D]5   t   f d d   | D  s | j    q q W| S)zCompact a path set to contain the minimal number of paths
        necessary to contain all paths in the set. If /a/path/ and
        /a/path/to/a/file.txt are both in the set, leave only the
        shorter path.r   c                sJ   g  |  ]@ }   j  |  oC   t | j t j j   t j j k  q SrK   )rq   r   rstripr|   r}   r   )rP   	shortpath)r}   rK   rL   rR     s   	z,UninstallPathSet.compact.<locals>.<listcomp>)r  sortedr   rl   r  )rn   r  short_pathsrK   )r}   rL   compact  s    	zUninstallPathSet.compactc             C   s5   t  j j |  j t  j j |  d j t  j j   S)NrO   )r|   r}   r   r  
splitdriver  r   )rn   r}   rK   rK   rL   _stash  s    	zUninstallPathSet._stashFc             C   s  |  j    s d S|  j s4 t j d |  j j  d St j d |  j j  t j d 7_ t |  j |  j   } z6| r d } n- x | D] } t j |  q Wt	 d d  } |  j
 r t j d  x* |  j |  j
  D] } t j |  q Wn  | d k rt j d	 d
 d d  |  _ xK | D]C } |  j |  } t j d |  |  j j |  t | |  q"Wx! |  j j   D] } | j   qyWt j d |  j j  n  Wd t j d 8_ Xd S)z[Remove paths in ``self.paths`` with confirmation (unless
        ``auto_confirm`` is True).Nz7Can't uninstall '%s'. No files were found to uninstall.zUninstalling %s:r   yzProceed (y/n)? nz.Not removing or modifying (outside of prefix):suffixz
-uninstallrQ  zpip-zRemoving file or directory %szSuccessfully uninstalled %s)r.  r/  )r   r  r   r   r$  r   r   r)  r+  r   r  r   r   r  r-  r   r  r   r   r  r  r   )rn   r#  r  rK  r}   new_pathr  rK   rK   rL   r     s<    			zUninstallPathSet.removec             C   s   |  j  d k r* t j d |  j j  d St j d |  j j  x> |  j D]3 } |  j |  } t j d |  t	 | |  qK Wx |  j
 D] } | j   q Wd S)z1Rollback the changes previously made by remove().Nz'Can't roll back %s; was not uninstalledFzRolling back uninstall of %szReplacing %s)r  r   r8  r$  r   r   r  r-  r   r   r  r7  )rn   r}   tmp_pathr  rK   rK   rL   r7  =  s    zUninstallPathSet.rollbackc             C   s5   |  j  d k	 r1 t |  j   d |  _  g  |  _ n  d S)z?Remove temporary save dir: rollback will no longer be possible.N)r  r   r  )rn   rK   rK   rL   r:  J  s    	zUninstallPathSet.commitN)r  r  r  __doc__ro   r  r   r  r  r+  r-  r   r7  r:  rK   rK   rK   rL   r    s   	%r  c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
r$  c             C   sG   t  j j |  s% t d |   n  | |  _ t   |  _ d  |  _ d  S)Nz.Cannot remove entries from nonexistent file %s)r|   r}   r   r
   rz   r  entries_saved_lines)rn   r%  rK   rK   rL   ro   S  s
    	zUninstallPthEntries.__init__c             C   sa   t  j j |  } t j d k rM t  j j |  d rM | j d d  } n  |  j j |  d  S)Nr  r   \r>  )	r|   r}   r  r   r  r,  r   r4  r  )rn   r&  rK   rK   rL   r  Z  s    &zUninstallPthEntries.addc             C   s   t  j d |  j  t |  j d  } | j   } | |  _ | j   t d d   | D  rg d } n d } xR |  j D]G } y, t  j d |  | j	 t
 | |   Wqw t k
 r Yqw Xqw Wt |  j d  } | j |  | j   d  S)	NzRemoving pth entries from %s:r;   c             s   s!   |  ] } t  d   | k Vq d S)z
N)r*   )rP   r   rK   rK   rL   r  k  s    z-UninstallPthEntries.remove.<locals>.<genexpr>z
rW  zRemoving entry: %swb)r   r   rz   r=   	readlinesr5  r   rl   r4  r   r*   r  
writelines)rn   r1  linesendliner&  rK   rK   rL   r   d  s"    	
		zUninstallPthEntries.removec             C   sk   |  j  d  k r' t j d |  j  d St j d |  j  t |  j d  } | j |  j   | j   d S)Nz.Cannot roll back changes to %s, none were madeFz!Rolling %s back to previous stater7  T)r5  r   r8  rz   r   r=   r9  r   )rn   r1  rK   rK   rL   r7  y  s    
zUninstallPthEntries.rollbackN)r  r  r  ro   r  r   r7  rK   rK   rK   rL   r$  R  s   
r$  c               @   s:   e  Z d  Z d Z d d   Z d d   Z d d   Z d S)	r  zQWrap a list of lines in an object with readline() to make
    ConfigParser happy.c             C   s   d d   | D |  _  d  S)Nc             s   s   |  ] } | Vq d  S)NrK   )rP   lrK   rK   rL   r    s    z$FakeFile.__init__.<locals>.<genexpr>)_gen)rn   r:  rK   rK   rL   ro     s    zFakeFile.__init__c             C   sT   y7 y t  |  j  SWn t k
 r5 |  j j    SYn XWn t k
 rO d SYn Xd  S)Nr   )nextr=  	NameErrorStopIteration)rn   rK   rK   rL   r    s    zFakeFile.readlinec             C   s   |  j  S)N)r=  )rn   rK   rK   rL   __iter__  s    zFakeFile.__iter__N)r  r  r  r3  ro   r  rA  rK   rK   rK   rL   r    s   	r  )aemail.parserr   r|   r"  r?   r   r   r   r   r  r@  distutils.utilr   pip.locationsr   r   r   r   r   pip.exceptionsr	   r
   r   r   r   r   r   pip.vcsr   pip.logr   pip.utilr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Zpip.backwardcompatr#   r$   r%   r&   r'   r(   r)   r*   	pip.indexr+   r,   pip.downloadr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   	pip.wheelr  r8   r9   r:   rU   r   rM   objectrN   r  r  r   r  Ir  r  r  r	  r  rp   r  r$  r  rK   rK   rK   rL   <module>   sV   (4p:L   R  N	cA2