U
    ,eq                     @   s  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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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'm(Z( d dl)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z> d dl?m@Z@mAZA e3eBZCG dd deZDd(eEeeF eeF eEeeF e
eF dddZGeeF eEeEdd d!ZHd)eeE eeF eeF eeF eEeEd"d#d$ZIeJeEeEeFd%d&d'ZKdS )*    N)SUPPRESS_HELPValues)ListOptional)
print_json)
WheelCache)
cmdoptions)make_target_python)RequirementCommandwarn_if_run_as_rootwith_cleanup)ERRORSUCCESS)CommandErrorInstallationError)
get_scheme)get_environment)InstallationReport)get_build_tracker)ConflictDetailscheck_install_conflicts)install_given_reqs)InstallRequirementcheck_legacy_setup_py_options)WINDOWStest_writable_dir)	getLogger)check_externally_managed
ensure_dirget_pip_version(protect_pip_from_modification_on_windowswrite_output)TempDirectory)running_under_virtualenvvirtualenv_no_global)build should_build_for_install_commandc                   @   sz   e Zd ZdZdZddddZeeee	 e
ddd	Ze	eedd
ddZee ee dddZee	dd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> ...N)returnc                 C   s  | 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 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 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 t  | j t  | j jd*dd+d,d-d | j jd.dd+d/d0 | j jd1dd2d,d3d | j jd4dd5d,d6d | j t  | j t  | j t  | j t  | j t  | j t  ttj| j}| jd7| | jd7| j  | j jd8d9d:d d;d d S )<Nz	--dry-run
store_truedry_runFzDon't actually install anything, just print what would be. Can be used in combination with --ignore-installed to 'resolve' the requirements.)actiondestdefaulthelpz-tz--target
target_dirdirzInstall 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.)r-   metavarr.   r/   z--useruse_user_sitezInstall 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-   r,   r/   z	--no-userstore_falsez--root	root_pathz=Install everything relative to this alternate root directory.z--prefixprefix_patha[  Installation prefix where lib, bin and other top-level folders are placed. Note that the resulting installation may contain scripts and other resources which reference the Python interpreter of pip, and not that of ``--prefix``. See also the ``--python`` option if the intention is to install packages into another (possibly pip-free) environment.z-Uz	--upgradeupgradezUpgrade 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-neededZ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_installedzIgnore 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 bytecodez--no-compilez.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   z--reportjson_report_filefileaW  Generate a JSON file describing what pip did to install the provided requirements. Can be used in combination with --dry-run and --ignore-installed to 'resolve' the requirements. When - is used as file name it writes to stdout. When writing to stdout, please combine with the --quiet option to avoid mixing pip logging output with JSON output.)cmd_opts
add_optionr   requirementsconstraintsno_depspreeditableadd_target_python_optionsr   srcignore_requires_pythonno_build_isolation
use_pep517no_use_pep517check_build_depsoverride_externally_managedconfig_settingsglobal_options	no_binaryonly_binaryprefer_binaryrequire_hashesprogress_barroot_user_actionmake_option_groupindex_groupparserinsert_option_group)selfZ
index_opts r]   _/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/pip/_internal/commands/install.pyadd_optionsH   s   zInstallCommand.add_options)optionsargsr)   c           *      C   s  |j r|jd k	rtd|jo"|j oB|jd koB|jd koB|jd k}|rT|jsTt  d}|j	rd|j
}tj|dd tdt  t|j |j|j|j|jd|_ d }d }|jrd|_tj|j|_tj|jrtj|jstdtdd	}|j}| | |jpg }| |}t|}	| j|||	|jd
}
| t }t|j  ddd}z| !|||
|}t"|| t#|j$}|D ]}d|_%q~| j&|||||
|j | j'd}| j(||
|||j |j|j|j)||j*d
}| +|
 |j,||j d}|jrLt-|j.}|jdkrt/|0 d n2t1|jddd}t2j3|0 |ddd W 5 Q R X |jr|4  t5dd |j.D }|rt6dd7dd |D  t8W S z|9d}W n t:k
r   d}Y nX |j;d k}t<|d dd  |j=> D }t?||dg |d!\}}|r"t@d"Ad#7d$d |D |B|}d }|jC o>|jD}|rP| E|}|jF}|jsf|jrjd}tG|||j||j||j |jHd%}tI|j ||j|j|jd&} tJ| }!|jKtLMd'd( g }"|D ]V}#|#jN}$z(|!O|$}%|%d k	r|$ d|%jP }$W n tQk
r   Y nX |"R|$ q|d k	r<| jS|| T|d) d7|"}&|&rVt6d*|& W nR tUk
r }' z2| j'd+k}(tV|'|(|j })tjW|)|(d, tX W Y S d }'~'X Y nX |jr|stY| Z|j||j	 |j[d-krt\  t8S ).Nz'Can not combine '--user' and '--target'zto-satisfy-onlyT)check_targetzUsing %s)r6   r0   r5   isolated_modez=Target path exists but is not a directory, will not continue.target)kind)r`   sessiontarget_pythonrJ   install)deletere   globally_managed)Ztemp_build_dirr`   build_trackerrf   finderr3   	verbosity)
preparerrl   r`   wheel_cacher3   r;   rJ   r:   r8   rL   )Zcheck_supported_wheels-)datawzutf-8)encoding   F)indentensure_asciic                 s   s"   | ]}|j d  |j d fV  qdS )nameversionN)metadata.0rr]   r]   r^   	<genexpr>  s   z%InstallCommand.run.<locals>.<genexpr>zWould install %s c                 s   s   | ]}d  |V  qdS )rp   N)join)r{   itemr]   r]   r^   r}     s     pip)modifying_pipc                 S   s   g | ]}t |r|qS r]   )r'   rz   r]   r]   r^   
<listcomp>  s   z&InstallCommand.run.<locals>.<listcomp>)ro   verifybuild_optionsrQ   zYCould not build wheels for {}, which is required to install pyproject.toml-based projectsz, c                 s   s   | ]}|j V  qd S N)rw   rz   r]   r]   r^   r}     s     )roothomeprefixr=   r3   Z	pycompile)userr   r   r   isolatedrw   )key)resolver_variantzSuccessfully installed %s   )exc_infowarn)]r3   r0   r   r+   r?   r5   r6   rO   r   r7   r8   r   check_dist_restrictionloggerverboser    decide_user_installrc   r;   ospathabspathexistsisdirr#   enter_contextrQ   Zget_default_sessionr	   Z_build_package_finderrJ   r   no_cleanZget_requirementsr   r   	cache_dirZpermit_editable_wheelsZmake_requirement_preparerrm   Zmake_resolverr:   rL   Ztrace_basic_inforesolver   Zrequirements_to_installr   to_dictopenjsondumpZ#warn_legacy_versions_and_specifierssortedr"   r   r   get_requirementKeyErrorZsatisfied_byr!   rC   valuesr&   r   formatZget_installation_orderignore_dependenciesr>   _determine_conflictsr=   r   r<   get_lib_location_guessesr   sortoperator
attrgetterrw   get_distributionrx   	Exceptionappend_warn_about_conflictsZdetermine_resolver_variantOSErrorcreate_os_error_messageerrorr   AssertionError_handle_target_dirrW   r   )*r\   r`   ra   Z#installing_into_current_environmentr8   target_temp_dirZtarget_temp_dir_pathrQ   rf   rg   rl   rk   	directoryreqsro   reqrn   ZresolverZrequirement_setZreportfZwould_install_itemsZpip_reqr   Zreqs_to_build_Zbuild_failures
to_installZ	conflictsZshould_warn_about_conflictsr=   	installedZlib_locationsenvitemsresultr   Zinstalled_distZinstalled_descr   show_tracebackmessager]   r]   r^   run	  s   





	
 
 











  zInstallCommand.run)r0   r   r7   r)   c                    sN  t | g }td|jd}|j}|j}|j}tj|rB|| tj|r`||kr`|| tj|rv|| |D ]}	t	|	D ]}
|	|krtj
||
 t fdd|d d D rqtj
||
}tj|r0|std| qtj|rtd| qtj|r&t| n
t| ttj
|	|
| qqzd S )N )r   c                 3   s   | ]}|  V  qd S r   )
startswith)r{   sZddirr]   r^   r}      s     z4InstallCommand._handle_target_dir.<locals>.<genexpr>zKTarget directory %s already exists. Specify --upgrade to force replacement.zTarget directory %s already exists and is a link. pip will not automatically replace links, please remove if replacement is desired.)r   r   r   purelibplatlibrq   r   r   r   listdirr   anyr   warningislinkr   shutilrmtreeremovemove)r\   r0   r   r7   Zlib_dir_listschemeZpurelib_dirZplatlib_dirZdata_dirlib_dirr   Ztarget_item_dirr]   r   r^   r     sH    



z!InstallCommand._handle_target_dir)r   r)   c                 C   s0   z
t |W S  tk
r*   td Y d S X 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)r\   r   r]   r]   r^   r   ;  s    
z#InstallCommand._determine_conflicts)conflict_detailsr   r)   c              
   C   s   |\}\}}|s|sd S g }|dkr0| d n|dks<t| d |D ]<}|| d }|| D ]"}	dj|||	d d}
| |
 qbqJ|D ]P}|| d }|| D ]6\}}}d	j||||||dkrd
ndd}
| |
 qqtd| d S )NZlegacyzpip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.z2020-resolverzpip'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   )rw   rx   requirementzg{name} {version} requires {requirement}, but {you} have {dep_name} {dep_version} which is incompatible.youzyou'll)rw   rx   r   dep_namedep_versionr   
)r   r   r   r   criticalr   )r\   r   r   Zpackage_setmissingconflictingpartsproject_namerx   
dependencyr   r   r   r   r]   r]   r^   r   G  sH    z$InstallCommand._warn_about_conflicts)__name__
__module____qualname____doc__usager_   r   r   r   strintr   r#   boolr   r   r   r   r   r   r]   r]   r]   r^   r(   4   s&    B }  7 r(   F)r   r   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   r]   r]   r^   r   ~  s    r   )r   r   r)   c                 C   s   t dd tt| |dD S )Nc                 s   s   | ]}t |V  qd S r   r   )r{   dr]   r]   r^   r}     s   z)site_packages_writable.<locals>.<genexpr>r   r   )allsetr   r   r]   r]   r^   site_packages_writable  s    r   )r3   r6   r0   r5   rc   r)   c                 C   s   | dk	r| st d dS | rF|r*tdt r8tdt d dS | dksRt|sZ|rht d dS tjs|t d	 dS t||d
rt 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   r   siteENABLE_USER_SITEr   info)r3   r6   r0   r5   rc   r]   r]   r^   r     s8    




r   )r   r   using_user_siter)   c                 C   s   g }| d |s,| d | t|  n
| d |d  d7  < | jtjkrd}d}t sz|sz||d| g n
| | | d	 tr| jtjkr| j	rt
| 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  zHINT: 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   )r   r   errnoZEACCESr$   extendlowerr   ENOENTfilenamelenr   strip)r   r   r   r   Zuser_option_partZpermissions_partr]   r]   r^   r     s>    






r   )FNNFN)NNNF)Lr   r   r   r   r   r   optparser   r   typingr   r   pip._vendor.richr   Zpip._internal.cacher   Zpip._internal.clir   Zpip._internal.cli.cmdoptionsr	   Zpip._internal.cli.req_commandr
   r   r   pip._internal.cli.status_codesr   r   pip._internal.exceptionsr   r   pip._internal.locationsr   pip._internal.metadatar   Z(pip._internal.models.installation_reportr   Z,pip._internal.operations.build.build_trackerr   Zpip._internal.operations.checkr   r   Zpip._internal.reqr   Zpip._internal.req.req_installr   r   pip._internal.utils.compatr   pip._internal.utils.filesystemr   pip._internal.utils.loggingr   pip._internal.utils.miscr   r   r    r!   r"   pip._internal.utils.temp_dirr#   pip._internal.utils.virtualenvr$   r%   Zpip._internal.wheel_builderr&   r'   r   r   r(   r   r   r   r   r   r   r   r]   r]   r]   r^   <module>   s       O     	    >  