ó
Ð²Ebc           @@  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 m	 Z	 d  d l
 m Z d  d l m Z m Z d  d l m Z m Z m Z d  d l m Z d  d l m Z m Z m Z m Z m Z m Z m Z m Z m Z d  d	 l m  Z  m! Z! d  d
 l" m# Z# e# ryd  d l$ m% Z% m& Z& m' Z' m( Z( m) Z) m* Z* m+ Z+ m, Z, m- Z- d  d l. m/ Z/ n  e j0 e1 ƒ Z2 d „  Z3 d „  Z4 e4 d „  ƒ Z5 d „  Z6 d „  Z7 d „  Z8 d e9 f d „  ƒ  YZ: d e9 f d „  ƒ  YZ; d e9 f d „  ƒ  YZ< d S(   i    (   t   absolute_importN(   t   pkg_resources(   t   UninstallationError(   t   bin_pyt   bin_user(   t   WINDOWSt   cache_from_sourcet   uses_pycache(   t
   indent_log(	   t   FakeFilet   askt   dist_in_usersitet   dist_is_localt   egg_link_patht   is_localt   normalize_patht   renamest   rmtree(   t   AdjacentTempDirectoryt   TempDirectory(   t   MYPY_CHECK_RUNNING(	   t   Anyt   Callablet   Dictt   Iterablet   Iteratort   Listt   Optionalt   Sett   Tuple(   t   Distributionc         C@  s“   t  |  ƒ r t } n t } t j j | | ƒ } | g } t r | j | d ƒ | j | d ƒ | r{ | j | d ƒ q | j | d ƒ n  | S(   s‘   Create the fully qualified name of the files created by
    {console,gui}_scripts for the given ``dist``.
    Returns the list of file names
    s   .exes   .exe.manifests   -script.pyws
   -script.py(   R   R   R   t   ost   patht   joinR   t   append(   t   distt   script_namet   is_guit   bin_dirt   exe_namet   paths_to_remove(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   _script_names0   s    		c         @  s"   t  j ˆ  ƒ ‡  f d †  ƒ } | S(   Nc          ?@  sH   t  ƒ  } x8 ˆ  |  | Ž  D]' } | | k r | j | ƒ | Vq q Wd  S(   N(   t   sett   add(   t   argst   kwt   seent   item(   t   fn(    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   uniqueH   s
    	(   t	   functoolst   wraps(   R0   R1   (    (   R0   s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   _uniqueF   s    c         c@  sÄ   t  j t |  j d ƒ ƒ ƒ } xŸ | D]— } t j j |  j | d ƒ } | V| j d ƒ r% t j j	 | ƒ \ } } | d  } t j j | | d ƒ } | Vt j j | | d ƒ } | Vq% q% Wd S(   s  
    Yield all the uninstallation paths for dist based on RECORD-without-.py[co]

    Yield paths to all the files in RECORD. For each .py file in RECORD, add
    the .pyc and .pyo in the same directory.

    UninstallPathSet.add() takes care of the __pycache__ .py[co].
    t   RECORDi    s   .pyiýÿÿÿs   .pycs   .pyoN(
   t   csvt   readerR	   t   get_metadata_linesR   R    R!   t   locationt   endswitht   split(   R#   t   rt   rowR    t   dnR0   t   base(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   uninstallation_pathsS   s    
c         @  sk   t  j j ‰ t ƒ  } xO t |  d t ƒD]; ‰  t ‡  ‡ f d †  | Dƒ ƒ } | s( | j ˆ  ƒ q( q( W| S(   sÈ   Compact 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.t   keyc         3@  sO   |  ]E } ˆ  j  | j d  ƒ ƒ oF ˆ  t | j d  ƒ j ˆ ƒ ƒ ˆ k Vq d S(   t   *N(   t
   startswitht   rstript   len(   t   .0t	   shortpath(   R    t   sep(    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pys	   <genexpr>v   s   (   R   R    RH   R*   t   sortedRE   t   anyR+   (   t   pathst   short_pathst   should_skip(    (   R    RH   s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   compactk   s    	c   	      @  sR  t  d „  |  Dƒ ƒ } t | ƒ } t t d „  | j ƒ  Dƒ ƒ d t ƒ} t ƒ  } d „  ‰ xÙ | D]Ñ ‰ t ‡ f d †  | Dƒ ƒ r‹ qc n  t ƒ  } t ƒ  } xf t j ˆ ƒ D]U \ ‰  } } | j ‡  ‡ ‡ f d †  | Dƒ ƒ | j ‡  ‡ ‡ f d †  | Dƒ ƒ q­ W| | sc | j	 | ƒ | j
 ˆ t j ƒ qc qc Wt t | j | ƒ ƒ | BS(   s«   Returns a set containing the paths that need to be renamed.

    This set may include directories when the original sequence of paths
    included every file on disk.
    c         s@  s'   |  ] } t  j j | ƒ | f Vq d  S(   N(   R   R    t   normcase(   RF   t   p(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pys	   <genexpr>†   s    c         s@  s%   |  ] } t  j j | ƒ d  Vq d S(   i    N(   R   R    R;   (   RF   RP   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pys	   <genexpr>ˆ   s   RA   c          W@  s   t  j j t  j j |  Œ  ƒ S(   N(   R   R    RO   R!   (   t   a(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt	   norm_joinŒ   s    c         3@  s*   |  ]  } t  j j ˆ  ƒ j | ƒ Vq d  S(   N(   R   R    RO   RC   (   RF   t   w(   t   root(    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pys	   <genexpr>‘   s   c         3@  s!   |  ] } ˆ ˆ ˆ  | ƒ Vq d  S(   N(    (   RF   t   d(   t   dirnameRR   RT   (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pys	   <genexpr>™   s   c         3@  s!   |  ] } ˆ ˆ ˆ  | ƒ Vq d  S(   N(    (   RF   t   f(   RV   RR   RT   (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pys	   <genexpr>›   s   (   t   dictR*   RI   t   valuesRE   RJ   R   t   walkt   updatet   difference_updateR+   RH   t   mapt   __getitem__(	   RK   t   case_mapt	   remainingt	   uncheckedt	   wildcardst	   all_filest   all_subdirst   subdirst   files(    (   RV   RR   RT   s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   compress_for_rename   s*    				
c         C@  s  t  |  ƒ } t  ƒ  } t  ƒ  } t  ƒ  } xg | D]_ } | j d ƒ rI q. n  | j d ƒ sd d | k r€ | j t j j | ƒ ƒ n  | j | ƒ q. Wt  t t j j | ƒ ƒ } t | ƒ } x¦ | D]ž } x• t j	 | ƒ D]„ \ } }	 }
 xr |
 D]j } | j d ƒ rqë n  t j j
 | | ƒ } t j j | ƒ rë t j j | ƒ | k rë | j | ƒ që që WqÕ Wq¿ W| d „  | Dƒ B} | | f S(   ss  Returns a tuple of 2 sets of which paths to display to user

    The first set contains paths that would be deleted. Files of a package
    are not added and the top-level directory of the package has a '*' added
    at the end - to signify that all it's contents are removed.

    The second set contains files that would have been skipped in the above
    folders.
    s   .pycs   __init__.pys
   .dist-infoc         S@  s%   h  |  ] } t  j j | d  ƒ ’ q S(   RB   (   R   R    R!   (   RF   t   folder(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pys	   <setcomp>Ô   s   	 (   R*   R:   R+   R   R    RV   R]   RO   RN   RZ   R!   t   isfile(   RK   t   will_removet	   will_skipt   foldersRf   R    t   _normcased_filesRh   t   dirpatht   _t   dirfilest   fnamet   file_(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   compress_for_output_listing§   s0    			t   StashedUninstallPathSetc           B@  sS   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e	 d „  ƒ Z
 RS(   sW   A set of file rename operations to stash files while
    tentatively uninstalling them.c         C@  s   i  |  _  g  |  _ d  S(   N(   t
   _save_dirst   _moves(   t   self(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   __init__Ý   s    	c         C@  sS   y t  | ƒ } Wn  t k
 r2 t d d ƒ } n X| |  j t j j | ƒ <| j S(   s   Stashes a directory.

        Directories are stashed adjacent to their original location if
        possible, or else moved/copied into the user's temp dir.t   kindt	   uninstall(   R   t   OSErrorR   Ru   R   R    RO   (   Rw   R    t   save_dir(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   _get_directory_stashæ   s    c         C@  sû   t  j j | ƒ } t  j j | ƒ d } } d } x} | | k r‚ y |  j | } PWn t k
 re n Xt  j j | ƒ | } } q4 Wt  j j | ƒ } t d d ƒ } | |  j | <t  j j | | ƒ } | rô | t  j j	 k rô t  j j
 | j | ƒ S| j S(   s‚   Stashes a file.

        If no root has been provided, one will be created for the directory
        in the user's temp directory.Ry   Rz   N(   R   R    RO   RV   t   NoneRu   t   KeyErrorR   t   relpatht   curdirR!   (   Rw   R    t   headt   old_headR|   R€   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   _get_file_stashõ   s"    c         C@  s›   t  j j | ƒ o" t  j j | ƒ } | r= |  j | ƒ } n |  j | ƒ } |  j j | | f ƒ | rŠ t  j j | ƒ rŠ t  j | ƒ n  t	 | | ƒ | S(   s   Stashes the directory or file and returns its new location.
        Handle symlinks as files to avoid modifying the symlink targets.
        (
   R   R    t   isdirt   islinkR}   R„   Rv   R"   t   rmdirR   (   Rw   R    t   path_is_dirt   new_path(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   stash  s    %c         C@  s@   x' |  j  j ƒ  D] \ } } | j ƒ  q Wg  |  _ i  |  _  d S(   s0   Commits the uninstall by removing stashed files.N(   Ru   t   itemst   cleanupRv   (   Rw   Ro   R|   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   commit'  s    	c         C@  sù   x! |  j  D] } t j d | Œ q
 WxÄ |  j  D]¹ \ } } yw t j d | | ƒ t j j | ƒ st t j j | ƒ r„ t j | ƒ n t j j	 | ƒ r£ t
 | ƒ n  t | | ƒ Wq. t k
 ræ } t j d | ƒ t j d | ƒ q. Xq. W|  j ƒ  d S(   s2   Undoes the uninstall by moving stashed files back.s   Moving to %s
 from %ss   Replacing %s from %ss   Failed to restore %ss   Exception: %sN(   Rv   t   loggert   infot   debugR   R    Ri   R†   t   unlinkR…   R   R   R{   t   errorR   (   Rw   RP   R‰   R    t   ex(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   rollback/  s    $c         C@  s   t  |  j ƒ S(   N(   t   boolRv   (   Rw   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   can_rollbackC  s    (   t   __name__t
   __module__t   __doc__Rx   R}   R„   RŠ   R   R”   t   propertyR–   (    (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyRt   Ú   s   							t   UninstallPathSetc           B@  sk   e  Z d  Z d „  Z d „  Z d „  Z d „  Z e e d „ Z d „  Z	 d „  Z
 d „  Z e d	 „  ƒ Z RS(
   sM   A set of file paths to be removed in the uninstallation of a
    requirement.c         C@  s:   t  ƒ  |  _ t  ƒ  |  _ i  |  _ | |  _ t ƒ  |  _ d  S(   N(   R*   RK   t   _refuset   pthR#   Rt   t   _moved_paths(   Rw   R#   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyRx   L  s
    		c         C@  s
   t  | ƒ S(   ss   
        Return True if the given path is one we are permitted to
        remove/modify, False otherwise.

        (   R   (   Rw   R    (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt
   _permittedT  s    c         C@  sÃ   t  j j | ƒ \ } } t  j j t | ƒ t  j j | ƒ ƒ } t  j j | ƒ sU d  S|  j | ƒ rw |  j j	 | ƒ n |  j
 j	 | ƒ t  j j | ƒ d d k r¿ t r¿ |  j	 t | ƒ ƒ n  d  S(   Ni   s   .py(   R   R    R;   R!   R   RO   t   existsRŸ   RK   R+   Rœ   t   splitextR   R   (   Rw   R    R‚   t   tail(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyR+   ]  s    '"c         C@  sk   t  | ƒ } |  j | ƒ rW | |  j k r@ t | ƒ |  j | <n  |  j | j | ƒ n |  j j | ƒ d  S(   N(   R   RŸ   R   t   UninstallPthEntriesR+   Rœ   (   Rw   t   pth_filet   entry(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   add_pthq  s    c         C@  sÿ   |  j  s# t j d |  j j ƒ d S|  j j d |  j j } t j d | ƒ t ƒ  £ | sl |  j | ƒ rõ |  j } t	 |  j  ƒ } x7 t
 t | ƒ ƒ D]# } | j | ƒ t j d | ƒ q— Wx! |  j j ƒ  D] } | j ƒ  qÎ Wt j d | ƒ n  Wd QXd S(   s[   Remove paths in ``self.paths`` with confirmation (unless
        ``auto_confirm`` is True).s7   Can't uninstall '%s'. No files were found to uninstall.Nt   -s   Uninstalling %s:s   Removing file or directory %ss   Successfully uninstalled %s(   RK   RŽ   R   R#   t   project_namet   versionR   t   _allowed_to_proceedRž   Rg   RI   RN   RŠ   R   R   RY   t   remove(   Rw   t   auto_confirmt   verboset   dist_name_versiont   movedt
   for_renameR    R   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyR«   {  s"    	
	c         C@  s›   d „  } | s' t  |  j ƒ \ } } n t |  j ƒ } t ƒ  } | d | ƒ | d | ƒ | d |  j ƒ | rˆ | d t |  j ƒ ƒ n  t d d	 ƒ d k S(
   sI   Display which files would be deleted and prompt for confirmation
        c         S@  sU   | s
 d  St  j |  ƒ t ƒ  / x' t t | ƒ ƒ D] } t  j | ƒ q4 WWd  QXd  S(   N(   RŽ   R   R   RI   RN   (   t   msgRK   R    (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   _display   s    
s   Would remove:s+   Would not remove (might be manually added):s%   Would not remove (outside of prefix):s   Will actually move:s   Proceed (y/n)? t   yt   n(   R³   R´   (   Rs   RK   R*   Rœ   Rg   R
   (   Rw   R­   R²   Rj   Rk   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyRª   ›  s    	
	c         C@  sq   |  j  j s& t j d |  j j ƒ d St j d |  j j ƒ |  j  j ƒ  x! |  j j	 ƒ  D] } | j ƒ  qY Wd S(   s1   Rollback the changes previously made by remove().s'   Can't roll back %s; was not uninstalledNs   Rolling back uninstall of %s(
   Rž   R–   RŽ   R’   R#   R¨   R   R”   R   RY   (   Rw   R   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyR”   º  s    c         C@  s   |  j  j ƒ  d S(   s?   Remove temporary save dir: rollback will no longer be possible.N(   Rž   R   (   Rw   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyR   È  s    c         C@  sO  t  | j ƒ } t | ƒ sA t j d | j | t j ƒ |  | ƒ S| d „  t j	 d ƒ t j	 d ƒ h Dƒ k r t j d | j | ƒ |  | ƒ S|  | ƒ } t
 | ƒ } d j t j | j ƒ ƒ } | j oÝ t j j | j ƒ } t | j d d  ƒ } | rl| j j d ƒ rl| j j | ƒ rl| j | j ƒ | j d	 ƒ r“x'| j d	 ƒ j ƒ  D]7 } t j j t j j | j | ƒ ƒ }	 | j |	 ƒ qUWq| j d
 ƒ r| j d ƒ rÃ| j d ƒ }
 n g  }
 x g  | j d
 ƒ j ƒ  D] } | râ| |
 k râ| ^ qâD]^ } t j j | j | ƒ }	 | j |	 ƒ | j |	 d ƒ | j |	 d ƒ | j |	 d ƒ qWqnœ| rt d j | j ƒ ƒ ‚ n{| j j d ƒ r| j | j ƒ t j j | j ƒ d } t j j t j j | j ƒ d ƒ } | j  | d | ƒ n| rB| j j d ƒ rBxê t! | ƒ D] }	 | j |	 ƒ q(WnÆ | ròt" | d ƒ % } t j j# | j$ ƒ  j% ƒ  ƒ } Wd  QX| | j k s®t& d j | | j | j ƒ ƒ ‚ | j | ƒ t j j t j j | ƒ d ƒ } | j  | | j ƒ n t j' d | | j ƒ | j d ƒ r£| j( d ƒ r£xz | j) d ƒ D]f } t* | ƒ rQt+ } n t, } | j t j j | | ƒ ƒ t- r6| j t j j | | ƒ d ƒ q6q6Wn  g  } | j. d d ƒ } x- | j/ ƒ  D] } | j0 t1 | | t2 ƒ ƒ qÈW| j. d d ƒ } x- | j/ ƒ  D] } | j0 t1 | | t3 ƒ ƒ q
Wx | D] } | j | ƒ q4W| S(   Ns1   Not uninstalling %s at %s, outside environment %sc         S@  s   h  |  ] } | r | ’ q S(    (    (   RF   RP   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pys	   <setcomp>Ú  s   	 t   stdlibt
   platstdlibs<   Not uninstalling %s at %s, as it is in the standard library.s   {}.egg-infoR    s	   .egg-infos   installed-files.txts   top_level.txts   namespace_packages.txts   .pys   .pycs   .pyos©   Cannot uninstall {!r}. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.s   .eggi   s   easy-install.pths   ./s
   .dist-infoR<   s;   Egg-link {} does not match installed location of {} (at {})s)   Not sure how to uninstall: %s - Check: %st   scriptss   .batt   groupt   console_scriptst   gui_scripts(4   R   R9   R   RŽ   R   RA   t   syst   prefixt	   sysconfigt   get_pathR   t   formatR   t   to_filenameR¨   t   egg_infoR   R    R    t   getattrt	   _providerR~   R:   R+   t   has_metadatat   get_metadatat
   splitlinest   normpathR!   R   R;   RV   R¦   R@   t   openRO   t   readlinet   stript   AssertionErrorR   t   metadata_isdirt   metadata_listdirR   R   R   R   t   get_entry_mapt   keyst   extendR)   t   Falset   True(   t   clsR#   t	   dist_pathR(   t   develop_egg_linkt   develop_egg_link_egg_infot   egg_info_existst   distutils_egg_infot   installed_fileR    t
   namespacesRP   t   top_level_pkgt   easy_install_eggt   easy_install_ptht   fht   link_pointert   scriptR&   t   _scripts_to_removeR¹   t   nameRº   t   s(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt	   from_distÍ  s®    


		"	$		*(   R—   R˜   R™   Rx   RŸ   R+   R¦   RÑ   R«   Rª   R”   R   t   classmethodRä   (    (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyR›   I  s   					
 			R£   c           B@  s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C@  s"   | |  _  t ƒ  |  _ d  |  _ d  S(   N(   t   fileR*   t   entriesR~   t   _saved_lines(   Rw   R¤   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyRx   S  s    	c         C@  sX   t  j j | ƒ } t rD t  j j | ƒ d rD | j d d ƒ } n  |  j j | ƒ d  S(   Ni    s   \t   /(   R   R    RO   R   t
   splitdrivet   replaceRç   R+   (   Rw   R¥   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyR+   Y  s    
c         C@  sW  t  j d |  j ƒ t j j |  j ƒ s? t  j d |  j ƒ d  St |  j d ƒ  } | j ƒ  } | |  _	 Wd  QXt
 d „  | Dƒ ƒ rŽ d } n d } | rÕ | d j | j d ƒ ƒ rÕ | d | j d ƒ | d <n  xS |  j D]H } y. t  j d	 | ƒ | j | | j d ƒ ƒ Wqß t k
 r&qß Xqß Wt |  j d
 ƒ  } | j | ƒ Wd  QXd  S(   Ns   Removing pth entries from %s:s.   Cannot remove entries from nonexistent file %st   rbc         s@  s   |  ] } d  | k Vq d S(   s   
N(    (   RF   t   line(    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pys	   <genexpr>w  s    s   
s   
iÿÿÿÿs   utf-8s   Removing entry: %st   wb(   RŽ   R   Ræ   R   R    Ri   t   warningRÈ   t	   readlinesRè   RJ   R:   t   encodeRç   R«   t
   ValueErrort
   writelines(   Rw   RÞ   t   linest   endlineR¥   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyR«   i  s*    	#c         C@  sh   |  j  d  k r& t j d |  j ƒ t St j d |  j ƒ t |  j d ƒ  } | j |  j  ƒ Wd  QXt	 S(   Ns.   Cannot roll back changes to %s, none were mades!   Rolling %s back to previous stateRî   (
   Rè   R~   RŽ   R’   Ræ   RÑ   R   RÈ   Ró   RÒ   (   Rw   RÞ   (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyR”   ‡  s    (   R—   R˜   Rx   R+   R«   R”   (    (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyR£   R  s   			(=   t
   __future__R    R6   R2   t   loggingR   R»   R½   t   pip._vendorR   t   pip._internal.exceptionsR   t   pip._internal.locationsR   R   t   pip._internal.utils.compatR   R   R   t   pip._internal.utils.loggingR   t   pip._internal.utils.miscR	   R
   R   R   R   R   R   R   R   t   pip._internal.utils.temp_dirR   R   t   pip._internal.utils.typingR   t   typingR   R   R   R   R   R   R   R   R   t   pip._vendor.pkg_resourcesR   t	   getLoggerR—   RŽ   R)   R4   R@   RN   Rg   Rs   t   objectRt   R›   R£   (    (    (    s<   /tmp/pip-build-UPPWic/pip/pip/_internal/req/req_uninstall.pyt   <module>   s8   @@				(	3oÿ 
