U
    „~$h4  ã                   @   s¸   d dl 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
 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mZ d dlmZmZmZ e  e¡ZG dd„ de
eƒZdS )é    N)ÚValues)ÚList)Úcanonicalize_name)Ú
cmdoptions)ÚCommand)ÚSessionCommandMixin)ÚSUCCESS)ÚInstallationError)Úparse_requirements)Úinstall_req_from_lineÚ#install_req_from_parsed_requirement)Úcheck_externally_managedÚ(protect_pip_from_modification_on_windowsÚwarn_if_run_as_rootc                   @   s8   e Zd ZdZdZddœdd„Zeee e	dœdd	„Z
dS )
ÚUninstallCommandaB  
    Uninstall packages.

    pip is able to uninstall most installed packages. Known exceptions are:

    - Pure distutils packages installed with ``python setup.py install``, which
      leave behind no metadata to determine what files were installed.
    - Script wrappers installed by ``python setup.py develop``.
    zU
      %prog [options] <package> ...
      %prog [options] -r <requirements file> ...N)Úreturnc              	   C   sd   | j jddddg ddd� | j jdd	d
ddd� | j  t ¡ ¡ | j  t ¡ ¡ | j d| j ¡ d S )Nz-rz--requirementÚrequirementsÚappendÚfilezjUninstall all the packages listed in the given requirements file.  This option can be used multiple times.)ÚdestÚactionÚdefaultÚmetavarÚhelpz-yz--yesÚyesÚ
store_truez2Don't ask for confirmation of uninstall deletions.)r   r   r   r   )Úcmd_optsÚ
add_optionr   Úroot_user_actionÚoverride_externally_managedÚparserÚinsert_option_group)Úself© r#   úD/tmp/pip-unpacked-wheel-g27rp152/pip/_internal/commands/uninstall.pyÚadd_options)   s&    øûzUninstallCommand.add_options)ÚoptionsÚargsr   c           
      C   s  |   |¡}i }|D ]4}t||jd�}|jr:||t|jƒ< qt d|¡ q|jD ]:}t|||d�D ]&}t	||jd�}|jr`||t|jƒ< q`qN|s¨t
d| j› d| j› d�ƒ‚|js´tƒ  td|kd� | ¡ D ]&}|j|j| jd	kd
�}	|	rÊ|	 ¡  qÊ|jdk�rtƒ  tS )N)ÚisolatedzSInvalid requirement: %r ignored - the uninstall command expects named requirements.)r&   Úsessionz*You must give at least one requirement to z (see "pip help z")Úpip)Úmodifying_pipr   )Úauto_confirmÚverboseÚwarn)Úget_default_sessionr   Úisolated_modeÚnamer   ÚloggerÚwarningr   r
   r   r	   r   r   r   ÚvaluesÚ	uninstallr   Ú	verbosityÚcommitr   r   r   )
r"   r&   r'   r)   Zreqs_to_uninstallr1   ÚreqÚfilenameZ
parsed_reqZuninstall_pathsetr#   r#   r$   ÚrunA   sX    
þü
  ÿ
 ÿÿÿþ
zUninstallCommand.run)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úusager%   r   r   ÚstrÚintr:   r#   r#   r#   r$   r      s   
r   )ÚloggingÚoptparser   Útypingr   Úpip._vendor.packaging.utilsr   Zpip._internal.clir   Úpip._internal.cli.base_commandr   Zpip._internal.cli.index_commandr   Úpip._internal.cli.status_codesr   Úpip._internal.exceptionsr	   Zpip._internal.reqr
   Úpip._internal.req.constructorsr   r   Úpip._internal.utils.miscr   r   r   Ú	getLoggerr;   r2   r   r#   r#   r#   r$   Ú<module>   s   
