a
    Œ�éi!o  ã                   @   s   d dl mZ d dlZ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	 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 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%m&Z& d dl'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 e2�r¢d dlm8Z8 d dl9m:Z:m;Z;m<Z< d dl=m>Z> d dlm?Z? d dl@mAZA d dl5mBZB d dlmCZC e DeE¡ZFdd„ ZGG d d!„ d!eƒZHd-d#d$„ZId%d&„ ZJd.d'd(„ZKd)d*„ ZLd+d,„ ZMdS )/é    )Úabsolute_importN)ÚSUPPRESS_HELP)Úpkg_resources)Úcanonicalize_name)Ú
WheelCache)Ú
cmdoptions)Úmake_target_python)ÚRequirementCommandÚwith_cleanup)ÚERRORÚSUCCESS)ÚCommandErrorÚInstallationError©Údistutils_scheme)Úcheck_install_conflicts)Úinstall_given_reqs)Úget_requirement_tracker)Úparse_distutils_args©Útest_writable_dir)Ú
ensure_dirÚget_installed_versionÚget_pip_versionÚ(protect_pip_from_modification_on_windowsÚwrite_output)ÚTempDirectory)ÚMYPY_CHECK_RUNNING)Úvirtualenv_no_global)ÚbuildÚ should_build_for_install_command)ÚValues)ÚIterableÚListÚOptional)ÚFormatControl)ÚConflictDetails)ÚInstallRequirement)ÚBinaryAllowedPredicate)Úrunning_under_virtualenvc                    s   ‡ fdd„}|S )Nc                    s&   | j r
dS t| jƒ}ˆ  |¡}d|v S )NTÚbinary)Ú
use_pep517r   ÚnameÚget_allowed_formats)ÚreqÚcanonical_nameÚallowed_formats©Úformat_control© úN/home/Claro/venv/lib/python3.9/site-packages/pip/_internal/commands/install.pyÚcheck_binary_allowed6   s
    

z6get_check_binary_allowed.<locals>.check_binary_allowedr3   )r2   r5   r3   r1   r4   Úget_check_binary_allowed4   s    r6   c                   @   s@   e Zd ZdZdZdd„ Zedd„ ƒZdd„ Zd	d
„ Z	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> ...c                 C   sŽ  | 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 j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d0d-d1d)d2d+� | j jd3d-d4d)d5d+� | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ | j  t ¡ ¡ t tj| j¡}| j d6|¡ | j d6| j ¡ d S )7Nz-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_truea  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.)  On Debian systems, this is the default when running outside of a virtual environment and not as root.)r:   Úactionr=   z	--no-userÚuse_system_locationz--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--systemzDInstall using the system scheme (overrides --user on Debian systems)z-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)r@   r:   r<   r=   z--no-compileÚstore_falsez.Do not compile Python source files to bytecode)r@   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_isolationr+   Ú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_optionsU   sè    û
üüûûüü	ûüü
ûüûûþzInstallCommand.add_optionsc           )         st  |j r|jd urtdƒ‚t |¡ d}|jr2|j}tj|dd� |jrP|jg}nd }|j s„|j	s„|js„|j
s„tƒ s„t ¡ dkr„d|_ |j
r�d|_ tj |j¡|_|jp¨g }t dtƒ ¡ t|j |j	|j|j|jd�|_ d }d }|j�r>d|_tj |j¡|_tj |j¡�r$tj |j¡�s$td	ƒ‚td
d�}|j}|  |¡ |j�pHg }|  |¡}	t|ƒ}
| j ||	|
|j!d�}t"|j#|j$ƒ}|  t%ƒ ¡}t|j& ddd�}�z\|  '||||	¡}t(||jƒ | j)||||	||j d�}| j*|||||j |j|j!|j+||j,d�
}|  -|¡ |j.||j d�}z| /d¡}W n t0�y>   d}Y n0 |j1d u }t2|d� t3|j$ƒ‰ ‡ fdd„|j4 5¡ D ƒ}t6||dg g d�\}}dd„ |D ƒ}|�r´t7d 8d 9|¡¡ƒ‚|D ]}|j,�s¸d|_:�q¸| ;|¡}d }|j< �oê|j=}|�rü|  >|¡}|j?}|j�rd}t@||||j||j	||j |jAd�	}tB|j ||j|j	|jd�}tC D|¡} |jEtF Gd¡d� g }!|D ]P}"|"jH}#z$tI|"jH| d�}$|$�rš|#d |$ 7 }#W n tJ�y°   Y n0 |! K|#¡ �qn|d u�rÞ| jL||  M|¡d!� d" 9|!¡}%|%�røtNd#|%ƒ W nP tO�yJ }& z6| jPd$k}'tQ|&|'|j ƒ}(tjR|(|'d%� tSW  Y d }&~&S d }&~&0 0 |j�rp|�s^J ‚|  T|j||j¡ tUS )&Nz'Can not combine '--user' and '--target'zto-satisfy-onlyT)Úcheck_targetr   FzUsing %s)rC   r8   rB   Úisolated_modez=Target path exists but is not a directory, will not continue.Útarget)Úkind)ÚoptionsÚsessionÚtarget_pythonrX   Úinstall)Údeleterl   Úglobally_managed)Útemp_build_dirrm   Úreq_trackerrn   Úfinderr>   )
Úpreparerru   rm   Úwheel_cacher>   rI   rX   rH   rE   r+   )Úcheck_supported_wheelsÚpip)Úmodifying_pipc                    s   g | ]}t |ˆ ƒr|‘qS r3   )r    ©Ú.0Úr©r5   r3   r4   Ú
<listcomp>n  s
   ÿÿz&InstallCommand.run.<locals>.<listcomp>)rw   ÚverifyÚbuild_optionsr\   c                 S   s   g | ]}|j r|j‘qS r3   )r+   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)Úworking_setú-)Úresolver_variantú zSuccessfully installed %sé   )Úexc_info)Vr>   r8   r   r   Úcheck_install_build_globalrD   rE   Úcheck_dist_restrictionÚpython_versionrC   rA   r)   ÚosÚgeteuidÚpathÚabspathÚsrc_dirr[   ÚloggerÚdebugr   Údecide_user_installrB   rj   rI   ÚexistsÚisdirr   Úenter_contextr\   Úget_default_sessionr   Ú_build_package_finderrX   r   Ú	cache_dirr2   r   Úno_cleanÚget_requirementsÚ'reject_location_related_install_optionsÚmake_requirement_preparerÚmake_resolverrH   r+   Útrace_basic_infoÚresolveÚget_requirementÚKeyErrorÚsatisfied_byr   r6   rP   Úvaluesr   r   ÚformatÚjoinÚlegacy_install_reasonÚget_installation_orderÚignore_dependenciesrM   Ú_determine_conflictsrL   r   rJ   Úget_lib_location_guessesr   Ú
WorkingSetÚsortÚoperatorÚ
attrgetterr,   r   Ú	ExceptionÚappendÚ_warn_about_conflictsÚdetermine_resolver_variantr   ÚEnvironmentErrorÚ	verbosityÚcreate_env_error_messageÚerrorr   Ú_handle_target_dirr   ))rf   rm   ÚargsrE   Úpython_versionsr[   Útarget_temp_dirÚtarget_temp_dir_pathr\   rn   ro   ru   rw   rt   Ú	directoryÚreqsrv   ÚresolverÚrequirement_setÚpip_reqrz   Úreqs_to_buildÚ_Úbuild_failuresÚpep517_build_failure_namesr}   Ú
to_installÚ	conflictsÚshould_warn_about_conflictsrL   Ú	installedÚlib_locationsr‰   ÚitemsÚresultÚitemÚinstalled_versionÚinstalled_descr½   Úshow_tracebackÚmessager3   r~   r4   Úrunï   sx   

ÿÿ
ûÿÿ


üýÿúö
ÿ

ÿÿ
ÿû

þþÿ

ÿ
þ
÷û
ÿ
þ
ÿ
ÿ

ÿzInstallCommand.runc                    sT  t |ƒ g }td|jd�}|d }|d }|d }tj |¡rH| |¡ tj |¡rf||krf| |¡ tj |¡r|| |¡ |D ]Î}	t |	¡D ]¾}
|	|krÈtj ||
¡‰ t‡ fdd„|d d… D ƒƒrÈqŽtj ||
¡}tj |¡�r6|söt	 
d	|¡ qŽtj |¡�rt	 
d
|¡ qŽtj |¡�r,t |¡ n
t |¡ t tj |	|
¡|¡ qŽq€d S )NÚ )rƒ   ÚpurelibÚplatlibÚdatac                 3   s   | ]}|  ˆ ¡V  qd S ©N)Ú
startswith)r|   Ús©Úddirr3   r4   Ú	<genexpr>ÿ  ó    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”   r’   rš   r·   Úlistdirr¬   Úanyr—   ÚwarningÚislinkr›   ÚshutilÚrmtreeÚremoveÚmove)rf   r8   rÁ   rD   Úlib_dir_listÚschemeÚpurelib_dirÚplatlib_dirÚdata_dirÚlib_dirrÓ   Útarget_item_dirr3   rà   r4   r¾   å  sN    


ýû
þz!InstallCommand._handle_target_dirc                 C   s.   z
t |ƒW S  ty(   t d¡ Y d S 0 d S )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)rf   rÌ   r3   r3   r4   r°     s    
ÿz#InstallCommand._determine_conflictsc              
   C   sò   |\}\}}|s|sd S g }|dkr0|  d¡ n|dks<J ‚|  d¡ |D ]<}|| d }|| D ]"}	dj|||	d d�}
|  |
¡ qbqJ|D ]P}|| d }|| D ]6\}}}d	j||||||dkrÈd
ndd�}
|  |
¡ q¤qŒt 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,   ÚversionÚ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¬   )rf   Úconflict_detailsr‹   Úpackage_setÚmissingÚconflictingÚpartsÚproject_namerö   Ú
dependencyr×   rù   rú   r.   r3   r3   r4   r¸   (  sH    ÿÿÿúÿ÷z$InstallCommand._warn_about_conflictsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úusagerh   r
   rØ   r¾   r°   r¸   r3   r3   r3   r4   r7   A   s    
 v8r7   Fc                 C   s$   t d| ||||d�}|d |d gS )NrÙ   )r†   rƒ   r‚   r‡   r„   rÚ   rÛ   r   )r†   rƒ   r‚   r‡   r„   rî   r3   r3   r4   r±   ^  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â   m  s   z)site_packages_writable.<locals>.<genexpr>©r‚   r‡   )ÚallÚsetr±   r
  r3   r3   r4   Úsite_packages_writablek  s
    
ÿÿr  c                 C   s¤   | dur| st  d¡ dS | rF|r*tdƒ‚tƒ r8tdƒ‚t  d¡ dS | du sRJ ‚|sZ|rht  d¡ dS tjs|t  d	¡ dS t||d
�r–t  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—   r˜   r   r   r   ÚsiteÚENABLE_USER_SITEr  Úinfo)r>   rC   r8   rB   rj   r3   r3   r4   r™   s  s4    
ÿÿ




r™   c                 C   sŠ   dd„ }g }| D ]0}|j }t|ƒ}|r| d || ¡ ƒ|¡¡ q|rjt|ƒ}|rj| d || ¡ ƒ¡¡ |srdS td d |¡¡ƒ‚dS )z’If any location-changing --install-option arguments were passed for
    requirements or on the command-line, then show a deprecation warning.
    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   ¶  rã   zSreject_location_related_install_options.<locals>.format_options.<locals>.<listcomp>r3   )Úoption_namesr3   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«   Úkeysr   r¬   )rP   rm   r  Ú	offendersr÷   r[   Úlocation_optionsr3   r3   r4   r¢   ¯  s4    ÿÿ
ÿÿýÿr¢   c                 C   sš   g }|  d¡ |s,|  d¡ |  t| ƒ¡ n
|  d¡ |d  d7  < | jtjkrˆd}d}|st| |d| ¡ g¡ n
|  |¡ |  d	¡ d
 |¡ ¡ d S )z{Format an error message for an EnvironmentError

    It may occur anytime during the execution of the install command.
    z5Could not install packages due to an EnvironmentErrorz: Ú.rä   rû   z"Consider using the `--user` optionzCheck the permissionsz or z.
rÙ   )r·   ÚstrÚerrnoÚEACCESÚextendÚlowerr¬   Ústrip)r½   rÖ   Úusing_user_siter  Úuser_option_partÚpermissions_partr3   r3   r4   r¼   Ù  s$    


þ

r¼   )FNNFN)NNNF)NÚ
__future__r   r  Úloggingr´   r’   ré   r  Úoptparser   Úpip._vendorr   Úpip._vendor.packaging.utilsr   Úpip._internal.cacher   Zpip._internal.clir   Zpip._internal.cli.cmdoptionsr   Úpip._internal.cli.req_commandr	   r
   Úpip._internal.cli.status_codesr   r   Úpip._internal.exceptionsr   r   Úpip._internal.locationsr   Úpip._internal.operations.checkr   Zpip._internal.reqr   Úpip._internal.req.req_trackerr   Ú"pip._internal.utils.distutils_argsr   Úpip._internal.utils.filesystemr   Úpip._internal.utils.miscr   r   r   r   r   Úpip._internal.utils.temp_dirr   Úpip._internal.utils.typingr   Úpip._internal.utils.virtualenvr   Úpip._internal.wheel_builderr   r    r!   Útypingr"   r#   r$   Ú#pip._internal.models.format_controlr%   r&   Zpip._internal.req.req_installr'   r(   r)   Ú	getLoggerr  r—   r6   r7   r±   r  r™   r¢   r¼   r3   r3   r3   r4   Ú<module>   sn   
    "     û

    û
<*