ó
'—^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(    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyt   __init__!   s    		
(   t   __name__t
   __module__R%   (    (    (    s4   /tmp/pip-build-eiI0Wo/pip/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      
      sV  t  d d ƒ ˆ  _ t ‡  f d †  d Dƒ ƒ ˆ  _ g  ˆ  _ g  ˆ  _ xI t t ˆ  j j ƒ  ƒ ƒ D], } ˆ  j j	 | j
 ƒ ˆ  j j | j ƒ q_ 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"   (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pys	   <genexpr><   s   t   normalt   overlayc         S   s"   h  |  ] } t  j j | ƒ ’ q S(    (   R   R   t   normcase(   R,   t   site(    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pys	   <setcomp>J   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+   R    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"   s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyR%   7   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   (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pys
   <dictcomp>p   s   	t   PATHt   PYTHONNOUSERSITEt
   PYTHONPATHt   1(   RG   RH   RI   (
   t	   _save_envR4   R:   t   splitR   t   pathsepR;   RD   t   updateR*   (   R"   R   t   old_patht
   pythonpath(    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyt	   __enter__n   s    
c         C   sS   xL |  j  j ƒ  D]; \ } } | d  k r> t j j | d  ƒ q | t j | <q Wd  S(   N(   RK   t   itemsRF   R   RD   t   pop(   R"   t   exc_typet   exc_valt   exc_tbt   varnamet	   old_value(    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyt   __exit__   s    c         C   s   |  j  j ƒ  d  S(   N(   R+   t   cleanup(   R"   (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyRZ   ˆ   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   R5   t   findR   t   parseRF   t   addR   t   strt   argst   as_requirement(   R"   t   reqst   missingt   conflictingt   wst   reqt   e(    (    s4   /tmp/pip-build-eiI0Wo/pip/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(   Rj   Rk   (   R3   R   t   AssertionErrorR    t   syst
   executableR   R   t   dirnamet   pip_locationt   loggert   getEffectiveLevelt   loggingt   DEBUGR9   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   R`   Rz   t   formatsR}   t   extra_indext   linkt   hostRo   (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyt   install_requirementsŸ   s<    		&		(	   R&   R'   t   __doc__R%   RQ   RY   RZ   Rh   R‰   (    (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyR(   3   s   	7				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"   (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyR%   Ð   s    c         C   s   d  S(   N(    (   R"   (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyRQ   Ó   s    c         C   s   d  S(   N(    (   R"   RT   RU   RV   (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyRY   Ö   s    c         C   s   d  S(   N(    (   R"   (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyRZ   Ù   s    c         C   s   t  ƒ  ‚ d  S(   N(   t   NotImplementedError(   R"   R   R‚   R   R„   (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyR‰   Ü   s    (   R&   R'   RŠ   R%   RQ   RY   RZ   R‰   (    (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyR‹   Ì   s   				(    ()   RŠ   Rw   R   Rq   R@   t   collectionsR    t   distutils.sysconfigR   t	   sysconfigR   t   pip._vendor.pkg_resourcesR   R   R   t   pipR   Rt   t   pip._internal.utils.subprocessR   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.index.package_finderR   t	   getLoggerR&   Ru   R   t   objectR(   R‹   (    (    (    s4   /tmp/pip-build-eiI0Wo/pip/pip/_internal/build_env.pyt   <module>   s(   (™