
[YeF                @   s\  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l 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  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 mO ZO mP ZP d d   ZQ Gd d   d eR  ZS Gd d   d eR  ZT Gd d   d eR  ZU d d   ZV e jW d e jX  ZY d d d d d d  ZZ d d   Z[ d d   Z\ d  d!   Z] d d" d#  Z^ Gd$ d%   d% eR  Z_ Gd& d'   d' eR  Z` Gd( d)   d) eR  Za 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)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_ext)pkg_resourcessixc             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 rM   3/home/kubikplay/www/django_dtb/build/pip/pip/req.pyread_text_file'   s    	rO   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xrM   rM   rN   
<listcomp>l   s   	 z/InstallRequirement.__init__.<locals>.<listcomp>)extras
isinstancer'   r;   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)selfrY   rZ   r[   r\   r^   r_   re   rl   r]   rj   rk   rM   rM   rN   __init__A   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:r[   r\   Tr^   r]   rl   )parse_editable
startswithr0   rU   )	clseditable_reqrZ   default_vcsnamer^   extras_overrider[   resrM   rM   rN   from_editablep   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^   rl   )stripospathnormpathabspathr/   r+   isdirseprr   r   r	   r1   r2   isfiler   warnurl_without_fragmentegg_fragmentschemeresearchextr:   r9   rH   	supportedr   )	rs   rv   rZ   rl   r^   rY   r~   linkwheelrM   rM   rN   	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))
rY   strr^   ra   r   locationrZ   rV   r'   	from_path)ro   srZ   rM   rM   rN   __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->)rY   r   rZ   rV   r'   r   )ro   r   rZ   rM   rM   rN   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-)rc   rY   tempfilemkdtemp_ideal_build_dirr\   rv   lowerr}   r~   exists_make_build_dirjoin)ro   	build_dirunpackrv   rM   rM   rN   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)r[   rY   rG   rc   r   r\   rv   r   r}   r~   r   r   r   debugr   r	   r   shutilmover`   )ro   old_locationnew_build_dirrv   new_locationrM   rM   rN   correct_build_location   s0    							z)InstallRequirement.correct_build_locationc             C   s   |  j  d  k r d  S|  j  j S)N)rY   project_name)ro   rM   rM   rN   rv      s    zInstallRequirement.namec             C   s&   |  j  d  k r d  St j |  j  j  S)N)rY   r$   quoteunsafe_name)ro   rM   rM   rN   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   r[   r<   PY2rV   	text_typeencodesysgetfilesystemencoding)ro   r   
setup_filesetup_pyrM   rM   rN   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)r[   rG   rv   r   notifyr   r^   indentr}   r~   r   r   r   _run_setup_pyreplacereprr   
executabler\   r   makedirsr    _filter_installVERBOSE_DEBUGrY   r;   rW   rX   pkg_infor   )ro   force_root_egg_infoscriptegg_info_cmdegg_base_optionegg_info_dirrM   rM   rN   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)
ra   has_metadataget_metadatar[   rG   egg_info_pathr}   r~   r   rO   )ro   rH   rJ   rM   rM   rN   egg_info_datab  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 SrM   )r}   r~   r   )rR   dir)rootrM   rN   rT     s   	z4InstallRequirement.egg_info_path.<locals>.<listcomp>c             S   s%   g  |  ] } | j  d   r |  q S)z	.egg-info)endswith)rR   frM   rM   rN   rT     s   	 z$No files/directories in %s (from %s)rQ   keyc             S   s8   |  j  t j j  t j j r3 |  j  t j j  p6 d S)Nr   )countr}   r~   r   altsep)rS   rM   rM   rN   <lambda>  s   z2InstallRequirement.egg_info_path.<locals>.<lambda>r   )r`   r\   r[   r}   r~   r   listdirwalkr   dirnamesremovelistr   extendr	   rG   lensort)ro   rH   base	filenamesdirsfilesr   rM   )r   rN   r   n  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|   rr   append)ro   rH   rJ   resultlinerM   rM   rN   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)ro   prJ   rM   rM   rN   r     s    	#zInstallRequirement.pkg_infoc             C   s   |  j  d  S)Nzdependency_links.txt)r   )ro   rM   rM   rN   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.txtrQ   zskipping extra %s)r   _requirements_section_rematchr   groupr   r   )ro   rU   in_extrar   r   rM   rM   rN   requirements  s    zInstallRequirement.requirementsc             c   s5   x. |  j  j D]  \ } } | d k r | Vq q Wd  S)Nz==)rY   rn   )ro   	qualifierversionrM   rM   rN   absolute_versions  s    z$InstallRequirement.absolute_versionsc             C   s   |  j    d S)Nr   )r   )ro   rM   rM   rN   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)r[   rG   r   rY   r   r   r   r   )ro   r   rM   rM   rN   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: %rrQ   r   z+Unexpected version control type (in %s): %s)r^   r   infor[   r\   rG   rr   re   splitr   get_backendobtainexport)ro   r  vc_typer^   backendvcs_backendrM   rM   rN   update_editable  s(    	"		z"InstallRequirement.update_editablec                sd  |  j    s% t d |  j f   n  |  j p4 |  j } t |  } t j j | j	 | j
    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|
 rR|	 r)| } n | } | j |  | j d
  rx| j d
  j   D]4 } t j j t j j | |   } | j |  qa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 | r^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 |  qwWn  | j d  r5| j" d  r5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  rJt) j*   } | j+ t, | j- d    | j. d  rJ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WqJ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	.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 SrM   rM   )rR   r   )
namespacesrM   rN   rT     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
   rv   ra   rb   UninstallPathSetr}   r~   r   r   egg_namer  r   r;   PY_MAJORr   r   addr   r   r   r   r   dirnameadd_pthr?   normcasereadliner|   r   rG   pipr   uninstallation_pathsmetadata_isdirmetadata_listdirr   r   r   r   platformr&   SafeConfigParserreadfpFakeFileget_metadata_lineshas_sectionitemsr   rg   )ro   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configrv   valuerM   )r
  rN   	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.)rg   rollbackr   errorr   )ro   rM   rM   rN   rollback_uninstallY  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.)rg   commitr   r8  r   )ro   rM   rM   rN   commit_uninstall`  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  )r[   rG   rv   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   )ro   r   create_archivearchive_namearchive_pathresponse	dest_filezipr   dirpathr   r   r  rv   zipdirrH   rM   rM   rN   archiveg  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 %rrQ   r>  )rr   r}   r~   r   rG   r   r   )ro   rv   prefixrM   rM   rN   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   rM   rN   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_versionr[   check_compatibilityrv   r8   rf   r   r   r}   r~   r   r   r   r   r   r   r_   rk   r   rQ  r)   r   r   r   r    r   r   r?   r|   r   r   r   r   r   r   rG  r   rmdir)ro   install_optionsglobal_optionsr   r   temp_locationrecord_filenameinstall_argsrV  r   r   r   	new_linesrH   rM   )r   rN   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   r[   r   rc   )ro   rM   rM   rN   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   rv   r   r    r   r   r   r   r[   r   rf   )ro   r]  r^  rM   rM   rN   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)ro   r   levelregexrM   rM   rN   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)rY   r   rb   r;   get_distributionra   r   VersionConflictrh   r   r   r   r	   r   )ro   existing_distrM   rM   rN   r    s(    		z"InstallRequirement.check_if_existsc             C   s   |  j  o d |  j  k S)Nz.whl)r^   )ro   rM   rM   rN   rY  9  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)rd   rc   r}   r~   r   r   )ro   r   rM   rM   rN   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^   re   Fr[   rj   )_bundle_editable_dirsr}   r~   basenamer   backendsr   bundle_filer   rv   r?   r@   r   parse_vcs_bundle_filerP   _bundle_build_dirs)
ro   dest_dirpackager  r^   revvcs_bundle_filer  rI   contentrM   rM   rN   bundle_requirementsI  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)rc   rG   r}   r~   r   r   r   r   r   r   r   r   r   r   r\  rs  rn  )ro   dest_build_dirdest_src_dirr   src_dirr   bundle_build_dirsbundle_editable_dirsr[   rt  dir_collectionr  destrM   rM   rN   move_bundle_filesc  s4    		#		z$InstallRequirement.move_bundle_filesc             C   s;   t  |  j |  j | d |  j d |  j d | d |  j d  S)Nuserhomer   rk   )r8   rv   rY   rh   ri   rk   )ro   wheeldirr   rM   rM   rN   r8     s    		z#InstallRequirement.move_wheel_filesc             C   s%   |  j  s t  t j j |  j  t  S)N)r[   rG   r}   r~   r   r   )ro   rM   rM   rN   rd    s    z)InstallRequirement.delete_marker_filename).__name__
__module____qualname__rp   classmethodry   r   r   r   r   r   propertyrv   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  rM   rM   rM   rN   rP   ?   sV   -*?*	n)Y!	rP   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)ro   rM   rM   rN   rp     s    	zRequirements.__init__c             C   s   |  j  S)N)r  )ro   rM   rM   rN   keys  s    zRequirements.keysc                s     f d d     j  D S)Nc                s   g  |  ] }   j  |  q SrM   )r  )rR   r   )ro   rM   rN   rT     s   	 z'Requirements.values.<locals>.<listcomp>)r  )ro   rM   )ro   rN   values  s    zRequirements.valuesc             C   s   | |  j  k S)N)r  )ro   itemrM   rM   rN   __contains__  s    zRequirements.__contains__c             C   s3   | |  j  k r" |  j  j |  n  | |  j | <d  S)N)r  r   r  )ro   r   r5  rM   rM   rN   __setitem__  s    zRequirements.__setitem__c             C   s   |  j  | S)N)r  )ro   r   rM   rM   rN   __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   )rR   k)ro   rM   rN   rT     s   	 z)Requirements.__repr__.<locals>.<listcomp>zRequirements({%s})z, )r  r   )ro   r  rM   )ro   rN   __repr__  s    zRequirements.__repr__N)
r  r  r  rp   r  r  r  r  r  r  rM   rM   rM   rN   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_   rh   ri   r-   sessionrk   wheel_download_dir)ro   r   r~  r  r  r  r  r_   ri   r  r  rh   r  rk   r  rM   rM   rN   rp     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 SrM   )rZ   )rR   rY   rM   rM   rN   rT     s   	 z*RequirementSet.__str__.<locals>.<listcomp>r   c             S   s   |  j  j   S)N)rv   r   )rY   rM   rM   rN   r     s    z(RequirementSet.__str__.<locals>.<lambda> c             S   s   g  |  ] } t  | j   q SrM   )r   rY   )rR   rY   rM   rM   rN   rT     s   	 )r   r  r   r   )ro   reqsrM   rM   rN   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))rv   r_   rh   ri   rk   r  r   has_requirementr	   get_requirementr   r   r  )ro   install_reqrv   rM   rM   rN   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  )ro   r   rv   rM   rM   rN   r    s    zRequirementSet.has_requirementc             C   s   t  |  j j    p |  j S)N)r   r   r  r  )ro   rM   rM   rN   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\   )rR   rY   rM   rM   rN   	<genexpr>  s    z/RequirementSet.has_editables.<locals>.<genexpr>Tc             s   s   |  ] } | j  Vq d  S)N)r\   )rR   rY   rM   rM   rN   r    s    F)rm   r   r  r  )ro   rM   rM   rN   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   )ro   rM   rM   rN   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)ro   r   rv   rM   rM   rN   r    s    zRequirementSet.get_requirementc             C   s8   x1 |  j  j   D]  } | j d |  | j   q Wd  S)Nr#  )r   r  r6  r;  )ro   r#  rY   rM   rM   rN   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  ra   r  rh   r   rb   r   r   r[   r   r~  r   r  r}   r~   r   r	   )ro   unnamedr  req_to_installinstall_neededrM   rM   rN   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   TFNrQ   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  ra   r  r  r^   find_requirementr   r   r   exc_inforh   r   rb   r   r   r   rr   r   r0   r   r[   r   r~  r}   r~   r   r   r   r  r  r   rP  r  rj   r   r   textwrapdedentr+   rG   rH   r   r:   r  
unpack_urlr(   r  r	   rc  r  ry  r   r  r   r   all_schemesr   copy_to_build_dirr;   find_distributionsrY   as_requirementr  requiresrU   r  r   rP   r   add_dependency_linksr   rW   rX   
ValueErrorr8  rv   rc   r  r  )ro   finderr   bundler  r  r  rR  best_installed	not_foundr^   rc  rY  r   r   r  do_downloadexcesubreqr$  rY   rv   rM   rM   rN   prepare_files5  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   )ro   r  rY   
remove_dirr   rM   rM   rN   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   )ro   rM   rM   rN   r  9  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   rv   r}   r~   r   r   copytreer[   r    )ro   r  ri   r  rM   rM   rN   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  )ro   r   r   r  only_downloadlocrM   rM   rN   r  E  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 SrM   )ra   )rR   r  rM   rM   rN   rT   f  s   	 z*RequirementSet.install.<locals>.<listcomp>zdistribute>=0.7r   z!Installing collected packages: %sz, c             S   s   g  |  ] } | j   q SrM   )rv   )rR   rY   rM   rM   rN   rT   v  s   	 r   r   zdistribute<0.7zFound existing installation: %sr#  TN)r   r  r;   rW   rX   rv   r   r   r   r   r   r   r   rk  rb   r   r6  rR  rf   r9  r;  re  r  )ro   r]  r^  argskwargs
to_installdistribute_reqrY   requirementdistribute_requirementexisting_distributerM   rM   rN   rR  d  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  rr   get_infor   r   rq  guider   rC  rF  r   rG  ry  r   )ro   bundle_filenamerM  vcs_dirsr   ro  rN  r   r   r  r  vcs_urlvcs_revvcs_dirrw  	vcs_guider  rv   rH   rM   rM   rN   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 SrM   )rZ   )rR   rY   rM   rM   rN   rT     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 SrM   )rZ   )rR   rY   rM   rM   rN   rT     s   	 r   )BUNDLE_HEADERr   r  r   rv   r   r   )ro   partsrY   rM   rM   rN   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 %rrQ   r>  )rr   r}   r~   r   rG   r   r   )ro   rv   rQ  rM   rM   rN   rC    s
    zRequirementSet._clean_zip_name)r  r  r  rp   r   r  r  r  r  r  r  r  r6  r  r  r  r  r  r  rR  r  r  ry  rC  rM   rM   rM   rN   r    s2   		'E7r  c             C   s   t  j |   t |   d  S)N)r}   r   r   )r   rM   rM   rN   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)"NrZ   r  rQ   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
--editableru   rl   pre)&r-   skip_requirements_regexr   r  r}   r~   r  r   r.   	enumerater   r|   subrr   r   r   
_scheme_rer#   urljoinr   parse_requirementslstripr   
find_linksr   
index_urls	use_wheelallow_externalsetr"   r   allow_all_externalallow_unverifiedrP   ry   ru   r   getattr)rH   r  rZ   r  r  
skip_match
skip_regexreqs_file_dirrx  line_numberr   req_urlr  relative_to_reqs_filerY   rM   rM   rN   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.*)$rQ   )r   r   r   )rY   r   rM   rM   rN   _strip_postfixb  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 SrM   rM   )rR   r   rM   rM   rN   rT   o  s   	 z'_build_req_from_url.<locals>.<listcomp>r   rQ   r   r>  r   tagsbranchestagbranch   trunk)ztagszbranchesztagzbranchr  )r  )r^   r  rY   rM   rM   rN   _build_req_from_urlm  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)rY   regexpmatchedretoptionrv   r5  rM   rM   rN   _build_editable_optionsx  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^(.+)(\[[^\]]+\])$rQ   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)rv   )rR   r  rM   rM   rN   rT     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   rr   r;   rW   rX   rU   r   r  r  rp  r  r  r   r  r	  r  )rt   ru   r^   rU   murl_no_extrasversion_controlr  error_messager  messagerY   ru  rM   rM   rN   rq     sT    ! $
rq   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)ro   r$  rM   rM   rN   rp     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   )ro   r~   rM   rM   rN   
_permitted  s    zUninstallPathSet._permittedc             C   sF   t  |  j  sB t j d |  j j t |  j j  t j f  d Sd S)Nz1Not uninstalling %s at %s, outside environment %sFT)	r   r$  r   r   r   r   r   r   rQ  )ro   rM   rM   rN   _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)NrQ   z.py)r   r}   r~   r   r  r  r  r  splitextr%   impcache_from_source)ro   r~   rM   rM   rN   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  )ro   pth_fileentryrM   rM   rN   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 SrM   )rr   r   rstripr}   r~   r   )rR   	shortpath)r~   rM   rN   rT     s   	z,UninstallPathSet.compact.<locals>.<listcomp>)r  sortedr   rm   r  )ro   r  short_pathsrM   )r~   rN   compact  s    	zUninstallPathSet.compactc             C   s5   t  j j |  j t  j j |  d j t  j j   S)NrQ   )r}   r~   r   r  
splitdriver  r   )ro   r~   rM   rM   rN   _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   )ro   r#  r  rK  r~   new_pathr  rM   rM   rN   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  )ro   r~   tmp_pathr  rM   rM   rN   r7  4  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  )ro   rM   rM   rN   r:  A  s    	zUninstallPathSet.commitN)r  r  r  __doc__rp   r  r  r  r  r*  r,  r   r7  r:  rM   rM   rM   rN   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
   r{   r  entries_saved_lines)ro   r$  rM   rM   rN   rp   J  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   r3  r  )ro   r%  rM   rM   rN   r  Q  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*   )rR   r   rM   rM   rN   r  b  s    z-UninstallPthEntries.remove.<locals>.<genexpr>z
rW  zRemoving entry: %swb)r   r   r{   r?   	readlinesr4  r   rm   r3  r   r*   r  
writelines)ro   r1  linesendliner%  rM   rM   rN   r   [  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 stater6  T)r4  r   r8  r{   r   r?   r8  r   )ro   r1  rM   rM   rN   r7  p  s    
zUninstallPthEntries.rollbackN)r  r  r  rp   r  r   r7  rM   rM   rM   rN   r#  I  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)NrM   )rR   lrM   rM   rN   r    s    z$FakeFile.__init__.<locals>.<genexpr>)_gen)ro   r9  rM   rM   rN   rp   ~  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)ro   rM   rM   rN   r    s    zFakeFile.readlinec             C   s   |  j  S)N)r<  )ro   rM   rM   rN   __iter__  s    zFakeFile.__iter__N)r  r  r  r2  rp   r  r@  rM   rM   rM   rN   r  {  s   	r  )bemail.parserr   r}   r!  rA   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:   pip._vendorr;   r<   rO   objectrP   r  r  r   r  Ir  r  r  r	  r  rq   r  r#  r  rM   rM   rM   rN   <module>   sT   (4p:L   R  N	cA|2