ó
Ð²Ebc           @   s  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 m Z d d l m Z e r/d d l m Z d d l m Z 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   open_spinner(   t   call_subprocess(   t   TempDirectoryt   tempdir_kinds(   t   MYPY_CHECK_RUNNING(   t   TracebackType(   t   Iterablet   Listt   Optionalt   Sett   Tuplet   Type(   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-UPPWic/pip/pip/_internal/build_env.pyt   __init__   s    		
(   t   __name__t
   __module__R(   (    (    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyR      s   t   BuildEnvironmentc           B   s;   e  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      
      sY  t  d t j d t ƒ ‰  t ‡  f d †  d Dƒ ƒ |  _ g  |  _ g  |  _ xI t t	 |  j j
 ƒ  ƒ ƒ D], } |  j j | j ƒ |  j j | j ƒ qe Wd „  t d t ƒ t d t ƒ f Dƒ } t 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   kindt   globally_managedc         3   s3   |  ]) } | t  t j j ˆ  j | ƒ ƒ f Vq d  S(   N(   R   R    R   t   join(   t   .0R!   (   t   temp_dir(    s4   /tmp/pip-build-UPPWic/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-UPPWic/pip/pip/_internal/build_env.pys	   <setcomp>J   s   	 R   R4   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$   (   R1   R2   (   R	   R
   t	   BUILD_ENVR#   R    t	   _prefixest	   _bin_dirst	   _lib_dirst   reversedt   listt   valuest   appendR"   t   extendR$   R   R   R    R   R.   t	   _site_dirt   existst   mkdirt   opent   writet   textwrapt   dedentt   format(   R%   R   R6   t   fp(    (   R0   s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyR(   5   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-UPPWic/pip/pip/_internal/build_env.pys
   <dictcomp>q   s   	t   PATHt   PYTHONNOUSERSITEt
   PYTHONPATHt   1(   RL   RM   RN   (
   t	   _save_envR9   R?   t   splitR    t   pathsepR@   RI   t   updateR.   (   R%   R   t   old_patht
   pythonpath(    (    s4   /tmp/pip-build-UPPWic/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(   RP   t   itemsRK   R    RI   t   pop(   R%   t   exc_typet   exc_valt   exc_tbt   varnamet	   old_value(    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyt   __exit__‚   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   R:   t   findR   t   parseRK   t   addR   t   strt   argst   as_requirement(   R%   t   reqst   missingt   conflictingt   wst   reqt   e(    (    s4   /tmp/pip-build-UPPWic/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 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   --pres   --prefer-binaryt   spinner(   Rn   Ro   (   R8   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_prereleasest   prefer_binaryR   R   (   R%   t   findert   requirementst   prefix_as_stringt   messageR   Rd   R~   t   formatsR   t   extra_indext   linkt   hostRs   (    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyt   install_requirements¢   s@    		&			(   R)   R*   t   __doc__R(   RV   R^   Rl   RŽ   (    (    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyR+   1   s   	9			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-UPPWic/pip/pip/_internal/build_env.pyR(   Õ   s    c         C   s   d  S(   N(    (   R%   (    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyRV   Ù   s    c         C   s   d  S(   N(    (   R%   RY   RZ   R[   (    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyR^   Ý   s    c         C   s   d  S(   N(    (   R%   (    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyt   cleanupæ   s    c         C   s   t  ƒ  ‚ d  S(   N(   t   NotImplementedError(   R%   R†   R‡   Rˆ   R‰   (    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyRŽ   ê   s    (   R)   R*   R   R(   RV   R^   R‘   RŽ   (    (    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyR   Ñ   s   					(    (-   R   R{   R    Ru   RE   t   collectionsR    t   distutils.sysconfigR   t	   sysconfigR   t   pip._vendor.pkg_resourcesR   R   R   t   pipR   Rx   t   pip._internal.cli.spinnersR   t   pip._internal.utils.subprocessR   t   pip._internal.utils.temp_dirR	   R
   t   pip._internal.utils.typingR   t   typesR   t   typingR   R   R   R   R   R   t"   pip._internal.index.package_finderR   t	   getLoggerR)   Ry   R   t   objectR+   R   (    (    (    s4   /tmp/pip-build-UPPWic/pip/pip/_internal/build_env.pyt   <module>   s*   . 