o
    {ŸŽiSn  ã                   @   s~  d dl Z d dlZd dlZd dlZd dlZd dlmZ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mZmZ d d	lmZmZ d d
l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( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z> d dl?m@Z@mAZAmBZB e4eCƒZDde#de@fdd„ZEG dd„ deƒZF	 			 	d:d!eGd"eeH d#eeH d$eGd%eeH de
eH fd&d'„ZId#eeH d$eGdeGfd(d)„ZJ				 d;d*eeG d+eeH d,eeH d-eeH d.eGdeGfd/d0„ZKd1e
e* d2ee
eH  ddfd3d4„ZLd5eMd6eGd7eGdeHfd8d9„ZNdS )<é    N)ÚSUPPRESS_HELPÚValues)ÚIterableÚListÚOptional)Úcanonicalize_name)Ú
WheelCache)Ú
cmdoptions)Úmake_target_python)ÚRequirementCommandÚwarn_if_run_as_rootÚwith_cleanup)ÚERRORÚSUCCESS)ÚCommandErrorÚInstallationError)Ú
get_scheme)Úget_environment)ÚFormatControl)ÚConflictDetailsÚcheck_install_conflicts)Úinstall_given_reqs)ÚInstallRequirement)Úget_requirement_tracker)ÚWINDOWS)Úparse_distutils_args©Útest_writable_dir)Ú	getLogger)Ú
ensure_dirÚget_pip_versionÚ(protect_pip_from_modification_on_windowsÚwrite_output)ÚTempDirectory)Úrunning_under_virtualenvÚvirtualenv_no_global)ÚBinaryAllowedPredicateÚbuildÚ should_build_for_install_commandÚformat_controlÚreturnc                    s   dt dtf‡ fdd„}|S )NÚreqr*   c                    s    t | jpdƒ}ˆ  |¡}d|v S )NÚ Úbinary)r   ÚnameÚget_allowed_formats)r+   Úcanonical_nameÚallowed_formats©r)   © úhC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\pip/_internal/commands/install.pyÚcheck_binary_allowed5   s   
z6get_check_binary_allowed.<locals>.check_binary_allowed)r   Úbool)r)   r5   r3   r2   r4   Úget_check_binary_allowed4   s   r7   c                   @   s†   e Zd ZdZdZddd„Zededee	 de
fd	d
„ƒZde	dededdfdd„Zdee dee fdd„Zdede	ddfdd„ZdS )ÚInstallCommandaI  
    Install packages from:

    - PyPI (and other indexes) using requirement specifiers.
    - VCS project urls.
    - Local project directories.
    - Local or remote source archives.

    pip also supports installing from "requirements files", which provide
    an easy way to specify a whole environment to be installed.
    a%  
      %prog [options] <requirement specifier> [package-index-options] ...
      %prog [options] -r <requirements file> [package-index-options] ...
      %prog [options] [-e] <vcs project url> ...
      %prog [options] [-e] <local project path> ...
      %prog [options] <archive url/path> ...r*   Nc                 C   sz  | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j jddddd dd� t | j ¡ | j jddd	d
d� | j jdddt	d� | j jdddd dd� | j jdddd dd� | j  t 
¡ ¡ | j  t ¡ ¡ | j jdddd	dd� | j jdddddgdd� | j jddd	d d� | j jd!d"d#d	d$d� | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j jd%d	d&d'd(d)� | j jd*dd&d+d,� | j jd-dd.d'd/d)� | j jd0dd1d'd2d)� | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ t tj| j¡}| j d3|¡ | j d3| j ¡ d S )4Nz-tz--targetÚ
target_dirÚdirz¥Install packages into <dir>. By default this will not replace existing files/folders in <dir>. Use --upgrade to replace existing packages in <dir> with new versions.)ÚdestÚmetavarÚdefaultÚhelpz--userÚuse_user_siteÚ
store_truez¸Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on Windows. (See the Python documentation for site.USER_BASE for full details.))r;   Úactionr>   z	--no-userÚstore_falsez--rootÚ	root_pathz=Install everything relative to this alternate root directory.z--prefixÚprefix_pathzIInstallation prefix where lib, bin and other top-level folders are placedz-Uz	--upgradeÚupgradez‚Upgrade all specified packages to the newest available version. The handling of dependencies depends on the upgrade-strategy used.z--upgrade-strategyÚupgrade_strategyzonly-if-neededÚeageraG  Determines how dependency upgrading should be handled [default: %default]. "eager" - dependencies are upgraded regardless of whether the currently installed version satisfies the requirements of the upgraded package(s). "only-if-needed" -  are upgraded only when they do not satisfy the requirements of the upgraded package(s).)r;   r=   Úchoicesr>   z--force-reinstallÚforce_reinstallz;Reinstall all packages even if they are already up-to-date.z-Iz--ignore-installedÚignore_installedz°Ignore the installed packages, overwriting them. This can break your system if the existing package is of a different version or was installed with a different package manager!z	--compileÚcompileTz'Compile Python source files to bytecode)rA   r;   r=   r>   z--no-compilez.Do not compile Python source files to bytecode)rA   r;   r>   z--no-warn-script-locationÚwarn_script_locationz0Do not warn when installing scripts outside PATHz--no-warn-conflictsÚwarn_about_conflictsz%Do not warn about broken dependenciesr   )Úcmd_optsÚ
add_optionr	   ÚrequirementsÚconstraintsÚno_depsÚpreÚeditableÚadd_target_python_optionsr   Ú	build_dirÚsrcÚignore_requires_pythonÚno_build_isolationÚ
use_pep517Úno_use_pep517Úinstall_optionsÚglobal_optionsÚ	no_binaryÚonly_binaryÚprefer_binaryÚrequire_hashesÚprogress_barÚmake_option_groupÚindex_groupÚparserÚinsert_option_group)ÚselfÚ
index_optsr3   r3   r4   Úadd_optionsQ   sÜ   û
üüûûü	ûüü
ûüûûþzInstallCommand.add_optionsÚoptionsÚargsc           (         s  |j r|jd urtdƒ‚t |¡ d}|jr|j}tj|dd� |jp$g }t	 
dtƒ ¡ t|j |j|j|j|jd�|_ d }d }|jrld|_tj |j¡|_tj |j¡r_tj |j¡s_tdƒ‚tdd	�}|j}|  |¡ |jppg }|  |¡}t|ƒ}	| j|||	|jd
�}
t|j|jƒ}|  t ƒ ¡}t|j! ddd�}�z2|  "|||
|¡}t#||jƒ | j$|||||
|j d�}| j%||
|||j |j|j|j&||j'd�
}|  (|
¡ |j)||j d�}z| *d¡}W n t+yê   d}Y nw |j,d u }t-|d� t.|
jƒ‰ ‡ fdd„|j/ 0¡ D ƒ}t1||dg g d�\}}dd„ |D ƒ}|�r%t2d 3d 4|¡¡ƒ‚|D ]
}|j'�s0d|_5�q'| 6|¡}d }|j7 �o@|j8}|�rI|  9|¡}|j:}|j�sT|j�rVd}t;||||j||j||j |j<d�	}t=|j ||j|j|jd�}t>|ƒ}|j?t@ Ad¡d� g } |D ]*}!|!jB}"z| C|"¡}#|#d u�r�|"› d|#jD› �}"W n
 tE�y¨   Y nw |  F|"¡ �q…|d u�r¿| jG||  H|¡d� d  4| ¡}$|$�rÌtId!|$ƒ W n( tJ�yõ }% z| jKd"k}&tL|%|&|j ƒ}'t	jM|'|&d#� tNW  Y d }%~%S d }%~%ww |j�r|�sÿJ ‚|  O|j||j¡ tPƒ  tQS )$Nz'Can not combine '--user' and '--target'zto-satisfy-onlyT)Úcheck_targetzUsing %s)rD   r9   rC   Úisolated_modez=Target path exists but is not a directory, will not continue.Útarget)Úkind)rj   ÚsessionÚtarget_pythonrX   Úinstall)Údeletero   Úglobally_managed)Útemp_build_dirrj   Úreq_trackerrp   Úfinderr?   )
Úpreparerrw   rj   Úwheel_cacher?   rJ   rX   rI   rF   rZ   )Úcheck_supported_wheelsÚpipF)Úmodifying_pipc                    s   g | ]	}t |ˆ ƒr|‘qS r3   )r(   ©Ú.0Úr©r5   r3   r4   Ú
<listcomp>O  s    ÿþÿz&InstallCommand.run.<locals>.<listcomp>)ry   ÚverifyÚbuild_optionsr]   c                 S   s   g | ]}|j r|j‘qS r3   )rZ   r.   r}   r3   r3   r4   r�   `  s
    þÿzPCould not build wheels for {} which use PEP 517 and cannot be installed directlyz, i°   )ÚrootÚhomeÚprefixrL   r?   Ú	pycompile)Úuserr…   r„   r†   Úisolatedr.   )Úkeyú-)Úresolver_variantú zSuccessfully installed %sé   )Úexc_info)Rr?   r9   r   r	   Úcheck_install_build_globalrE   rF   Úcheck_dist_restrictionr\   ÚloggerÚverboser    Údecide_user_installrD   rC   rm   rJ   ÚosÚpathÚabspathÚexistsÚisdirr#   Úenter_contextr]   Úget_default_sessionr
   Ú_build_package_finderrX   r   Ú	cache_dirr)   r   Úno_cleanÚget_requirementsÚ'reject_location_related_install_optionsÚmake_requirement_preparerÚmake_resolverrI   rZ   Útrace_basic_infoÚresolveÚget_requirementÚKeyErrorÚsatisfied_byr!   r7   rP   Úvaluesr'   r   ÚformatÚjoinÚlegacy_install_reasonÚget_installation_orderÚignore_dependenciesrM   Ú_determine_conflictsrL   r   rK   Úget_lib_location_guessesr   ÚsortÚoperatorÚ
attrgetterr.   Úget_distributionÚversionÚ	ExceptionÚappendÚ_warn_about_conflictsÚdetermine_resolver_variantr"   ÚOSErrorÚ	verbosityÚcreate_os_error_messageÚerrorr   Ú_handle_target_dirr   r   )(rg   rj   rk   rF   r\   Útarget_temp_dirÚtarget_temp_dir_pathr]   rp   rq   rw   ry   rv   Ú	directoryÚreqsrx   ÚresolverÚrequirement_setÚpip_reqr|   Úreqs_to_buildÚ_Úbuild_failuresÚpep517_build_failure_namesr   Ú
to_installÚ	conflictsÚshould_warn_about_conflictsrL   Ú	installedÚlib_locationsÚenvÚitemsÚresultÚitemÚinstalled_distÚinstalled_descr¼   Úshow_tracebackÚmessager3   r€   r4   Úrunà   sl  

ûÿÿ



üýÿúö
ÿÿ
ÿÿ
ÿ
û
þÿþ
€ÿ
þ
÷û

€ÿ
þ
ÿ€
ÿ€ø


ÿzInstallCommand.runr9   r¾   rE   c                    sH  t |ƒ g }td|jd�}|j}|j}|j}tj |¡r!| |¡ tj |¡r0||kr0| |¡ tj |¡r;| |¡ |D ]d}	t 	|	¡D ]\}
|	|kratj 
||
¡‰ t‡ fdd„|d d… D ƒƒraqDtj 
||
¡}tj |¡r•|swt d|¡ qDtj |¡r„t d|¡ qDtj |¡r�t |¡ nt |¡ t tj 
|	|
¡|¡ qDq=d S )Nr,   )r…   c                 3   s   � | ]}|  ˆ ¡V  qd S ©N)Ú
startswith)r~   Ús©Úddirr3   r4   Ú	<genexpr>à  s   € z4InstallCommand._handle_target_dir.<locals>.<genexpr>éÿÿÿÿzKTarget directory %s already exists. Specify --upgrade to force replacement.z„Target directory %s already exists and is a link. pip will not automatically replace links, please remove if replacement is desired.)r   r   r–   ÚpurelibÚplatlibÚdatar•   r˜   r¶   Úlistdirrª   Úanyr’   ÚwarningÚislinkr™   ÚshutilÚrmtreeÚremoveÚmove)rg   r9   r¾   rE   Úlib_dir_listÚschemeÚpurelib_dirÚplatlib_dirÚdata_dirÚlib_dirrÑ   Útarget_item_dirr3   rÚ   r4   r½   Å  sR   


ýû
þäÿz!InstallCommand._handle_target_dirrÉ   c                 C   s*   zt |ƒW S  ty   t d¡ Y d S w )NzwError while checking for conflicts. Please file an issue on pip's issue tracker: https://github.com/pypa/pip/issues/new)r   rµ   r’   Ú	exception)rg   rÉ   r3   r3   r4   r®   þ  s   
ÿûz#InstallCommand._determine_conflictsÚconflict_detailsrŒ   c              
   C   sò   |\}\}}|s|sd S g }|dkr|  d¡ n|dksJ ‚|  d¡ |D ]}|| d }|| D ]}	dj|||	d d�}
|  |
¡ q1q%|D ](}|| d }|| D ]\}}}d	j||||||dkrdd
ndd�}
|  |
¡ qRqFt d |¡¡ d S )NÚlegacyz¤pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.z2020-resolverz§pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.r   z@{name} {version} requires {requirement}, which is not installed.rŽ   )r.   r´   Úrequirementzg{name} {version} requires {requirement}, but {you} have {dep_name} {dep_version} which is incompatible.Úyouzyou'll)r.   r´   ró   Údep_nameÚdep_versionrô   Ú
)r¶   r©   r’   Úcriticalrª   )rg   rñ   rŒ   Úpackage_setÚmissingÚconflictingÚpartsÚproject_namer´   Ú
dependencyrÕ   rõ   rö   r+   r3   r3   r4   r·   
  sL   ÿÿú÷÷ôz$InstallCommand._warn_about_conflicts)r*   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úusageri   r   r   r   ÚstrÚintrÖ   r#   r6   r½   r   r   r   r®   r·   r3   r3   r3   r4   r8   =   s:    
  eÿÿÿ
þ9ÿ
þÿÿþr8   Frˆ   r…   r„   r‰   r†   c                 C   s    t d| ||||d�}|j|jgS )Nr,   )rˆ   r…   r„   r‰   r†   )r   rÞ   rß   )rˆ   r…   r„   r‰   r†   rê   r3   r3   r4   r¯   A  s   úr¯   c                 C   s   t dd„ tt| |d�ƒD ƒƒS )Nc                 s   s   � | ]}t |ƒV  qd S r×   r   )r~   Údr3   r3   r4   rÜ   T  s   € 
ÿz)site_packages_writable.<locals>.<genexpr>©r„   r‰   )ÚallÚsetr¯   r  r3   r3   r4   Úsite_packages_writableS  s
   
ÿÿr
  r?   rD   r9   rC   rm   c                 C   s¤   | dur| st  d¡ dS | r#|rtdƒ‚tƒ rtdƒ‚t  d¡ dS | du s)J ‚|s-|r4t  d¡ dS tjs>t  d	¡ dS t||d
�rKt  d¡ dS t  d¡ dS )aZ  Determine whether to do a user install based on the input options.

    If use_user_site is False, no additional checks are done.
    If use_user_site is True, it is checked for compatibility with other
    options.
    If use_user_site is None, the default behaviour depends on the environment,
    which is provided by the other arguments.
    Nz$Non-user install by explicit requestFzVCan not combine '--user' and '--prefix' as they imply different installation locationszZCan not perform a '--user' install. User site-packages are not visible in this virtualenv.z User install by explicit requestTz3Non-user install due to --prefix or --target optionz4Non-user install because user site-packages disabledr  z0Non-user install because site-packages writeablezMDefaulting to user installation because normal site-packages is not writeable)	r’   Údebugr   r%   r   ÚsiteÚENABLE_USER_SITEr
  Úinfo)r?   rD   r9   rC   rm   r3   r3   r4   r”   Z  s4   
ÿÿ




r”   rP   rj   c                 C   s˜   dt t dtt fdd„}g }| D ]}|j}t|ƒ}|r)| d || ¡ ƒ|¡¡ q|r>t|ƒ}|r>| d || ¡ ƒ¡¡ |sBdS td d	 	|¡¡ƒ‚)
z’If any location-changing --install-option arguments were passed for
    requirements or on the command-line, then show a deprecation warning.
    Úoption_namesr*   c                 S   s   dd„ | D ƒS )Nc                 S   s   g | ]}d   | dd¡¡‘qS )z--{}rÆ   r‹   )r©   Úreplace)r~   r.   r3   r3   r4   r�   œ  s    zSreject_location_related_install_options.<locals>.format_options.<locals>.<listcomp>r3   )r  r3   r3   r4   Úformat_options›  s   z?reject_location_related_install_options.<locals>.format_optionsz{!r} from {}z{!r} from command lineNz˜Location-changing options found in --install-option: {}. This is unsupported, use pip-level options like --user, --prefix, --root, and --target instead.z; )
r   r  r   r\   r   r¶   r©   Úkeysr   rª   )rP   rj   r  Ú	offendersró   r\   Úlocation_optionsr3   r3   r4   r    •  s8   ÿÿ€
ÿÿÿýr    r¼   rÔ   Úusing_user_sitec                 C   sÎ   g }|  d¡ |s|  d¡ |  t| ƒ¡ n|  d¡ |d  d7  < | jtjkrGd}d}tƒ s=|s=| |d| ¡ g¡ n|  |¡ |  d	¡ tr^| jtjkr^| j	r^t
| j	ƒd
kr^|  d¡ d |¡ ¡ d S )zrFormat an error message for an OSError

    It may occur anytime during the execution of the install command.
    z,Could not install packages due to an OSErrorz: Ú.rÝ   r÷   z"Consider using the `--user` optionzCheck the permissionsz or z.
i  zÉHINT: This error might have occurred since this system does not have Windows Long Path support enabled. You can find information on how to enable this at https://pip.pypa.io/warnings/enable-long-paths
r,   N)r¶   r  ÚerrnoÚEACCESr$   ÚextendÚlowerr   ÚENOENTÚfilenameÚlenrª   Ústrip)r¼   rÔ   r  rü   Úuser_option_partÚpermissions_partr3   r3   r4   r»   ¿  s0   



þ

ÿÿr»   )FNNFN)NNNF)Or  r±   r•   rå   r  Úoptparser   r   Útypingr   r   r   Úpip._vendor.packaging.utilsr   Úpip._internal.cacher   Zpip._internal.clir	   Zpip._internal.cli.cmdoptionsr
   Úpip._internal.cli.req_commandr   r   r   Úpip._internal.cli.status_codesr   r   Úpip._internal.exceptionsr   r   Úpip._internal.locationsr   Úpip._internal.metadatar   Ú#pip._internal.models.format_controlr   Úpip._internal.operations.checkr   r   Úpip._internal.reqr   Zpip._internal.req.req_installr   Úpip._internal.req.req_trackerr   Úpip._internal.utils.compatr   Ú"pip._internal.utils.distutils_argsr   Úpip._internal.utils.filesystemr   Úpip._internal.utils.loggingr   Úpip._internal.utils.miscr   r    r!   r"   Úpip._internal.utils.temp_dirr#   Úpip._internal.utils.virtualenvr$   r%   Úpip._internal.wheel_builderr&   r'   r(   rÿ   r’   r7   r8   r6   r  r¯   r
  r”   r    r¹   r»   r3   r3   r3   r4   Ú<module>   s°    	    	ûÿþýüû
ú	ûÿþýüû
ú;ÿ
ÿ
þ*ÿÿÿþ