ó
b]c           @   se  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l	 m
 Z
 d d l m Z m Z m Z d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z e rd d l m Z m Z m Z m Z m Z d d l  m! Z! n  e j" e# ƒ Z$ d d d „  ƒ  YZ% d e& f d „  ƒ  YZ' d e' f d „  ƒ  YZ( d S(   s;   Build Environment used for isolation during sdist building
iÿÿÿÿN(   t   OrderedDict(   t   get_python_lib(   t	   get_paths(   t   Requirementt   VersionConflictt
   WorkingSet(   t   __file__(   t   call_subprocess(   t   TempDirectory(   t   MYPY_CHECK_RUNNING(   t   open_spinner(   t   Tuplet   Sett   Iterablet   Optionalt   List(   t   PackageFindert   _Prefixc           B   s   e  Z d  „  Z RS(   c         C   s¦   | |  _  t |  _ t t j d k r* d n d d i | d 6| d 6ƒd |  _ t d t d | ƒ } t d t d | ƒ } | | k r“ | g |  _	 n | | g |  _	 d  S(	   Nt   ntt   posix_prefixt   varst   baset   platbaset   scriptst   plat_specifict   prefix(
   t   patht   Falset   setupR   t   ost   namet   bin_dirR   t   Truet   lib_dirs(   t   selfR   t   purelibt   platlib(    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyt   __init__   s    		
(   t   __name__t
   __module__R%   (    (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyR      s   t   BuildEnvironmentc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sF   Creates and manages an isolated environment to install build deps
    c      
      sc  t  d d ƒ ˆ  _ ˆ  j j ƒ  t ‡  f d †  d Dƒ ƒ ˆ  _ g  ˆ  _ g  ˆ  _ xI t t ˆ  j j	 ƒ  ƒ ƒ D], } ˆ  j j
 | j ƒ ˆ  j j | j ƒ ql Wd „  t d t ƒ t d t ƒ f Dƒ } t j j ˆ  j j d ƒ ˆ  _ t j j ˆ  j ƒ s
t j ˆ  j ƒ n  t t j j ˆ  j d	 ƒ d
 ƒ 2 } | j t j d ƒ j d | d ˆ  j ƒ ƒ Wd  QXd  S(   Nt   kinds	   build-envc         3   s6   |  ], } | t  t j j ˆ  j j | ƒ ƒ f Vq d  S(   N(   R   R   R   t   joint	   _temp_dir(   t   .0R   (   R"   (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pys	   <genexpr>9   s   t   normalt   overlayc         S   s"   h  |  ] } t  j j | ƒ ’ q S(    (   R   R   t   normcase(   R,   t   site(    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pys	   <setcomp>G   s   	 R   R0   s   sitecustomize.pyt   wsŸ  
                import os, site, sys

                # First, drop system-sites related paths.
                original_sys_path = sys.path[:]
                known_paths = set()
                for path in {system_sites!r}:
                    site.addsitedir(path, known_paths=known_paths)
                system_paths = set(
                    os.path.normcase(path)
                    for path in sys.path[len(original_sys_path):]
                )
                original_sys_path = [
                    path for path in original_sys_path
                    if os.path.normcase(path) not in system_paths
                ]
                sys.path = original_sys_path

                # Second, add lib directories.
                # ensuring .pth file are processed.
                for path in {lib_dirs!r}:
                    assert not path in sys.path
                    site.addsitedir(path)
                t   system_sitesR!   (   R-   R.   (   R   R+   t   createR    t	   _prefixest	   _bin_dirst	   _lib_dirst   reversedt   listt   valuest   appendR   t   extendR!   R   R   R    R   R   R*   t	   _site_dirt   existst   mkdirt   opent   writet   textwrapt   dedentt   format(   R"   R   R2   t   fp(    (   R"   s6   lib/python2.7/site-packages/pip/_internal/build_env.pyR%   3   s(    		"$c         C   s™   d „  d Dƒ |  _  |  j } |  j  d } | rL | j | j t j ƒ ƒ n  |  j g } t j j i t j j	 | ƒ d 6d d 6t j j	 | ƒ d 6ƒ d  S(   Nc         S   s(   i  |  ] } t  j j | d  ƒ | “ q S(   N(   R   t   environt   gett   None(   R,   R   (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pys
   <dictcomp>m   s   	t   PATHt   PYTHONNOUSERSITEt
   PYTHONPATHt   1(   RH   RI   RJ   (
   t	   _save_envR5   R;   t   splitR   t   pathsepR<   RE   t   updateR*   (   R"   R   t   old_patht
   pythonpath(    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyt	   __enter__k   s    
c         C   sS   xL |  j  j ƒ  D]; \ } } | d  k r> t j j | d  ƒ q | t j | <q Wd  S(   N(   RL   t   itemsRG   R   RE   t   pop(   R"   t   exc_typet   exc_valt   exc_tbt   varnamet	   old_value(    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyt   __exit__~   s    c         C   s   |  j  j ƒ  d  S(   N(   R+   t   cleanup(   R"   (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyR[   …   s    c         C   sÀ   t  ƒ  } t  ƒ  } | r¶ t |  j ƒ } xŒ | D] } y2 | j t j | ƒ ƒ d k re | j | ƒ n  Wq. t k
 r® } | j t	 | j
 d j ƒ  ƒ t	 | j
 d ƒ f ƒ q. Xq. Wn  | | f S(   s–   Return 2 sets:
            - conflicting requirements: set of (installed, wanted) reqs tuples
            - missing requirements: set of reqs
        i    i   N(   t   setR   R6   t   findR   t   parseRG   t   addR   t   strt   argst   as_requirement(   R"   t   reqst   missingt   conflictingt   wst   reqt   e(    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyt   check_requirements‰   s    		"c         C   së  |  j  | } | j s t ‚ t | _ | s0 d  St j t j j t	 ƒ d d d d | j d g } t
 j ƒ  t j k r… | j d ƒ n  x[ d D]S } t | j | ƒ } | j d	 | j d
 d ƒ d j t | pÒ d h ƒ ƒ f ƒ qŒ W| j }	 |	 r4| j d |	 d g ƒ x5 |	 d D] }
 | j d |
 g ƒ qWn | j d ƒ x$ | j D] } | j d | g ƒ qKWx$ | j D] } | j d | g ƒ qrW| j r¨| j d ƒ n  | j d	 ƒ | j | ƒ t | ƒ  } t | d | ƒWd  QXd  S(   Nt   installs   --ignore-installeds	   --no-users   --prefixs   --no-warn-script-locations   -vt	   no_binaryt   only_binarys   --t   _t   -t   ,s   :none:s   -ii    i   s   --extra-index-urls
   --no-indexs   --find-linkss   --trusted-hosts   --pret   spinner(   Rk   Rl   (   R4   R   t   AssertionErrorR    t   syst
   executableR   R   t   dirnamet   pip_locationt   loggert   getEffectiveLevelt   loggingt   DEBUGR:   t   getattrt   format_controlR;   t   replaceR*   t   sortedt
   index_urlst
   find_linkst   trusted_hostst   allow_all_prereleasesR
   R   (   R"   t   findert   requirementst   prefix_as_stringt   messageR   Ra   R{   t   formatsR~   t   extra_indext   linkt   hostRp   (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyt   install_requirementsœ   s<    		&		(	   R&   R'   t   __doc__R%   RR   RZ   R[   Ri   RŠ   (    (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyR(   /   s   	8				t   NoOpBuildEnvironmentc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s5   A no-op drop-in replacement for BuildEnvironment
    c         C   s   d  S(   N(    (   R"   (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyR%   Í   s    c         C   s   d  S(   N(    (   R"   (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyRR   Ð   s    c         C   s   d  S(   N(    (   R"   RU   RV   RW   (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyRZ   Ó   s    c         C   s   d  S(   N(    (   R"   (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyR[   Ö   s    c         C   s   t  ƒ  ‚ d  S(   N(   t   NotImplementedError(   R"   R‚   Rƒ   R   R…   (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyRŠ   Ù   s    (   R&   R'   R‹   R%   RR   RZ   R[   RŠ   (    (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyRŒ   É   s   				(    ()   R‹   Rx   R   Rr   RA   t   collectionsR    t   distutils.sysconfigR   t	   sysconfigR   t   pip._vendor.pkg_resourcesR   R   R   t   pipR   Ru   t   pip._internal.utils.miscR   t   pip._internal.utils.temp_dirR   t   pip._internal.utils.typingR	   t   pip._internal.utils.uiR
   t   typingR   R   R   R   R   t   pip._internal.indexR   t	   getLoggerR&   Rv   R   t   objectR(   RŒ   (    (    (    s6   lib/python2.7/site-packages/pip/_internal/build_env.pyt   <module>   s(   (š