
    c                     P   d dl mZmZ d dlZd dlZd dlZd dlZd dlmZ  G d de	          Z
 G d de
          Zd Zdd	Zdd
ZddZd Z ej        ddg          Z ej        d          Z ej        d          Z ej        d          Z ed          Zd Zd Zd Zd ZdS )    )absolute_importprint_functionN)streaming_popenc                       e Zd ZdZdS )PipErrorzGeneral pip error.N__name__
__module____qualname____doc__     Alib/python3.11/site-packages/anaconda_project/internal/pip_api.pyr   r      s        Dr   r   c                       e Zd ZdZdS )PipNotInstalledErrorz-Pip isn't even installed in this environment.Nr   r   r   r   r   r      s        77Dr   r   c                 ,   t           j                            | dd          }t           j                            | dd          }d ||fD             }t          |          dk    rt	          d| z            |d         g}|                    |           |S )NbinpipScriptszpip.exec                 P    g | ]#}t           j                            |          !|$S r   )ospathexists).0r   s     r   
<listcomp>z$_get_pip_command.<locals>.<listcomp>#   s+    FFFC"'..2E2EFCFFFr   r   z4'pip' command is not installed in the environment %s)r   r   joinlenr   extend)prefix
extra_argsunix_pipwin_pippipscmd_lists         r   _get_pip_commandr%      s    w||FE511Hgll69i88GFFHg.FFFD
4yyA~ d"#Y\b#bcccQyHOOJOr   c           	      <   t          | |          }	 t          j        |||          \  }}}nG# t          $ r:}t	          dd                    |          dt          |                    d }~ww xY wd                    |          }	|j        dk    r't	          d                    |          d|	          |	dk    rG|	                    d          D ]1}
t          |d         d|d         d|
t          j        	           2d                    |          S )
N)stdout_callbackstderr_callbackzfailed to run:  z:  r   
   )file)r%   r   popenOSErrorr   r   repr
returncodesplitprintsysstderr)r   r    r'   r(   r$   pstdout_linesstderr_lineseerrstrlines              r   	_call_pipr<   +   sK   
33HP*9*?P_P_+a +a +a'L,,  P P Ph#((82D2D2D2Dd1gggNOOOPWW\""F|q S388H#5#5#5#5vv>???	2 SLL&& 	S 	SD!hqkkk44@szRRRRR77<   s   . 
A25A--A2c                     |rt          |t          t          f          st          d|z            dg}|                    |           t          | |||          S )z%Install packages into an environment.zXmust specify a list of one or more packages to install into existing environment, not %rinstallr    r'   r(   
isinstancelisttuple	TypeErrorr   r<   r   pkgsr'   r(   argss        r   r>   r>   =   so     z$u66 r   	 ;DKKVo_noooor   c                     |rt          |t          t          f          st          d          ddg}|                    |           t          | |||          S )z$Remove packages from an environment.zOmust specify a list of one or more packages to remove from existing environment	uninstallz--yesr?   r@   rE   s        r   removerJ   I   sd     kz$u66 kijjj!DKKVo_noooor   c                    t           j                            |           st                      S 	 t	          | dg          }|                    dd          }n# t          $ r d}Y nw xY wt          j        dt          j	                  }t                      }|
                    |          D ]B}|                    d          |                    d	          f||                    d          <   C|S )
z6Get a dict of package names to (name, version) tuples.freeze)r    z
r+   r*   z^(.+)==(.+)$)flagsr,      )r   r   isdirdictr<   replacer   recompile	MULTILINEfinditergroup)r   outline_reresultmatchs        r   	installedr[   S   s    7==   vv H:666kk&$''    j===GVVF!!#&& B B"'++a..%++a..!Au{{1~~Ms   (A A'&A'ParsedPipSpecnamez *([a-zA-Z0-9][-_.a-zA-Z0-9]+)z[#&]egg=([^&]*)z^(.*?)(?:-dev|-\d.*)$)httphttpsr-   ftpgitzgit+httpz	git+httpszgit+sshzgit+gitzgit+filehgzhg+httpzhg+httpszhg+sshzhg+static-httpbzrzbzr+httpz	bzr+httpszbzr+sshzbzr+sftpzbzr+ftpzbzr+lpsvnzsvn+sshzsvn+httpz	svn+httpszsvn+svnc                 |    d| v r7|                      dd          d         }|                                t          v S dS )N:r,   r   F)r2   lower_url_schemes)sschemes     r   _is_pip_understood_urlrj   y   s<    
ax a#||~~--ur   c                 h    t                               |           }||                    d          S d S Nr,   )	_spec_patrZ   rV   )specms     r   _extract_namerp      s0    A wwqzztr   c                     t                               |           }|Yt          |                    d                    }|3t                              |          }||                    d          S |S d S d S rl   )_egg_fragment_researchrp   rV   _egg_fragment_postfix_re)urlro   fragments      r   _extract_name_from_egg_fragmentrw      s    $$A  ,, 	  )//99A  wwqzz!	  	  tr   c                     t          |           rt          |           }nt          |           }|dS t          |          S )a  Parse a pip spec, right now we only understand the name portion.

    Parsing it exactly as pip would is extremely complicated, and
    we would pretty much have to import the pip code.
    So for now we'll "fail late" when we invoke pip.

    What we understand currently is an url with a "#egg=foo"
    fragment, and a plain package name (possibly with version info
    on it). We don't understand filesystem paths yet.

    Returns:
       ``ParsedPipSpec`` or None on failure

    N)r]   )rj   rw   rp   r\   )rn   r]   s     r   
parse_specry      sN     d## #.t44T"" (t$''''r   )NN)NNN)
__future__r   r   collectionsr   rR   r4   anaconda_project.internalr   	Exceptionr   r   r%   r<   r>   rJ   r[   
namedtupler\   rS   rm   rr   rt   setrg   rj   rp   rw   ry   r   r   r   <module>r      s   7 6 6 6 6 6 6 6     				 				 



 5 5 5 5 5 5	 	 	 	 	y 	 	 		 	 	 	 	8 	 	 		 	 	! ! ! !$	p 	p 	p 	pp p p p  0 '&AABJ899	2:011 %2:&>?? s 8 9 9       ( ( ( ( (r   