U
    «ÃT_–j  ã                   @   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 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"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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 e4�r¦d dlm:Z: d dl;m<Z<m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZC d dl7mDZD d dlmEZE e FeG¡ZHdd„ ZIG d d!„ d!eƒZJd"d#„ ZKd$d%„ ZLd-d'd(„ZMd)d*„ ZNd+d,„ ZOdS ).é    )Úabsolute_importN)ÚSUPPRESS_HELP)Úpkg_resources)Úcanonicalize_name)Ú
WheelCache)Ú
cmdoptions)Úmake_target_python)ÚRequirementCommand)ÚERRORÚSUCCESS)ÚCommandErrorÚInstallationErrorÚPreviousBuildDirError©Údistutils_scheme)Úcheck_install_conflicts)ÚRequirementSetÚinstall_given_reqs)Úget_requirement_tracker)Ú
deprecated)Úparse_distutils_args©Útest_writable_dir)Ú
ensure_dirÚget_installed_versionÚ(protect_pip_from_modification_on_windowsÚwrite_output)ÚTempDirectory)ÚMYPY_CHECK_RUNNING)Úvirtualenv_no_global)ÚbuildÚ should_build_for_install_command)ÚValues)ÚAnyÚIterableÚListÚOptional)ÚFormatControl)ÚInstallRequirement)ÚBinaryAllowedPredicate)Úrunning_under_virtualenvc                    s   ‡ fdd„}|S )Nc                    s&   | j r
dS t| jƒ}ˆ  |¡}d|kS )NTÚbinary)Ú
use_pep517r   ÚnameÚget_allowed_formats)ÚreqÚcanonical_nameÚallowed_formats©Úformat_control© úB/tmp/pip-unpacked-wheel-8u7dkzi1/pip/_internal/commands/install.pyÚcheck_binary_allowed@   s
    

z6get_check_binary_allowed.<locals>.check_binary_allowedr4   )r3   r6   r4   r2   r5   Úget_check_binary_allowed>   s    r7   c                       s<   e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Zd	d
„ Z‡  Z	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                    sp  t t| ƒj||Ž | j}| t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t 	¡ ¡ | t 
¡ ¡ |jddddd dd� t |¡ |jddd	d
d� |jddd	td� |jdddd dd� |jdddd dd� |jddd	dd� | t ¡ ¡ | t ¡ ¡ |jdddd	dd� |jdddddgdd� |jd d!d	d"d� |jd#d$d%d	d&d� | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ |jd'd	d(d)d*d+� |jd,d-d(d.d/� |jd0d-d1d)d2d+� |jd3d-d4d)d5d+� | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ | t ¡ ¡ t tj| j¡}| j d6|¡ | j d6|¡ 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)rA   r;   r=   r>   z--no-compileÚstore_falsez.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   )Úsuperr8   Ú__init__Ú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Úno_cleanÚrequire_hashesÚprogress_barÚmake_option_groupÚindex_groupÚparserÚinsert_option_group)ÚselfÚargsÚkwrQ   Ú
index_opts©Ú	__class__r4   r5   rP   _   sô     û

üüûûü ü	ûü ü
ûüûûþzInstallCommand.__init__c           '         s�  t  |¡ d}|jr|j}t j|dd� |jr8|jg}nd }|jsl|jsl|jsl|j	slt
ƒ slt ¡ dkrld|_|j	rxd|_tj |j¡|_|jp�g }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�pg }|  |¡}	t|ƒ}
| j||	|
|jd
�}|j�pH|j }t |j!|j"ƒ}t#ƒ ��
}t|j|dd���ì}t$|j d�}�zº�z(|  '|||||	|¡ t(||jƒ | j)||||	||jd�}| j*|||||j|j|j|j+||j,d�
}|  -|¡ | .|¡ z| /d¡}W n t0k
�r*   d }Y nX |j1d k}t2|d� t3|j"ƒ‰ ‡ fdd„|j4 5¡ D ƒ}t6||g g d�\}}dd„ |D ƒ}|�r¨t7d 8d 9dd„ |D ƒ¡¡ƒ‚| :|¡}|j; �oÀ|j<}|�rÒ|  =|¡ |j>}|j�räd}t?||||j||j|j@||jd�	}tA|j||j|j|jd�}tB C|¡}|jDtE Fd¡d� g }|D ]R} | jG}!z$tH| jG|d�}"|"�rp|!d|" 7 }!W n tIk
�rˆ   Y nX | J|!¡ �qDd  9|¡}#|#�r²tKd!|#ƒ W nŠ tLk
�r" }$ zN| jMd"k}%tN|$|%|jƒ}&tOjP|&|%d#� tQ W Y ¢W ¢HW  5 Q R £ W  5 Q R £ S d }$~$X Y n tRk
�r>   d|_‚ Y nX W 5 |j�s\| %¡  | &¡  X W 5 Q R X W 5 Q R X |j�rŒ|  S|j||j¡ tTS )$Nzto-satisfy-onlyT)Úcheck_targetr   F)rD   r9   rC   Úisolated_modez=Target path exists but is not a directory, will not continue.Útarget)Úkind)ÚoptionsÚsessionÚtarget_pythonr[   Úinstall)Údeleters   )Úcheck_supported_wheels)Útemp_build_dirrt   Úreq_trackerru   Úfinderr?   )
Úpreparerr|   rt   Úwheel_cacher?   rJ   r[   rI   rF   r,   Úpip)Úmodifying_pipc                    s   g | ]}t |ˆ ƒr|‘qS r4   )r!   ©Ú.0Úr©r6   r4   r5   Ú
<listcomp>w  s    ÿÿz&InstallCommand.run.<locals>.<listcomp>)r~   Úbuild_optionsr_   c                 S   s   g | ]}|j r|‘qS r4   )r,   r�   r4   r4   r5   r…   Š  s     zPCould not build wheels for {} which use PEP 517 and cannot be installed directlyz, c                 s   s   | ]}|j V  qd S ©N)r-   r�   r4   r4   r5   Ú	<genexpr>‘  s     z%InstallCommand.run.<locals>.<genexpr>)ÚrootÚhomeÚprefixÚ	pycompilerM   r?   )ÚuserrŠ   r‰   r‹   Úisolatedr-   )Úkey)Úworking_setú-ú zSuccessfully installed %sé   ©Úexc_info)Ur   Úcheck_install_build_globalrE   rF   Úcheck_dist_restrictionÚpython_versionr?   rD   r9   rB   r*   ÚosÚgeteuidÚpathÚabspathÚsrc_dirr^   Údecide_user_installrC   rq   rJ   ÚexistsÚisdirr   r   r_   Úget_default_sessionr   Ú_build_package_finderr[   rc   rY   r   Ú	cache_dirr3   r   r   Úcleanup_filesÚcleanupÚpopulate_requirement_setÚwarn_deprecated_install_optionsÚmake_requirement_preparerÚmake_resolverrI   r,   Útrace_basic_infoÚresolveÚget_requirementÚKeyErrorÚsatisfied_byr   r7   rS   Úvaluesr    r   ÚformatÚjoinÚget_installation_orderÚignore_dependenciesrN   Ú_warn_about_conflictsrM   r   rK   Úget_lib_location_guessesr   Ú
WorkingSetÚsortÚoperatorÚ
attrgetterr-   r   Ú	ExceptionÚappendr   ÚEnvironmentErrorÚ	verbosityÚcreate_env_error_messageÚloggerÚerrorr
   r   Ú_handle_target_dirr   )'rj   rt   rk   rF   Úpython_versionsr^   Útarget_temp_dirÚtarget_temp_dir_pathr_   ru   rv   r|   Úbuild_deleter~   r{   Ú	directoryÚrequirement_setr}   ÚresolverÚpip_reqr€   Úreqs_to_buildÚ_Úbuild_failuresÚpep517_build_failuresÚ
to_installÚshould_warn_about_conflictsrM   Ú	installedÚlib_locationsr�   ÚitemsÚresultÚitemÚinstalled_versionÚinstalled_descrÀ   Úshow_tracebackÚmessager4   r„   r5   Úruný   s†   

ÿÿ
ûÿÿ

ü  ÿÿ    þ ÿúö



ÿÿ
ÿü
ÿþÿÿ
þ
÷û
 ÿ
 ÿ
  ÿ4  ÿzInstallCommand.runc              	      sf  t |ƒ g }|��J td|jd�}|d }|d }|d }tj |¡rP| |¡ tj |¡rn||krn| |¡ tj |¡r„| |¡ |D ]Î}	t |	¡D ]¾}
|	|krÐtj ||
¡‰ t‡ fdd„|d d… D ƒƒrÐq–tj ||
¡}tj |¡�r>|sþt	 
d	|¡ q–tj |¡�rt	 
d
|¡ q–tj |¡�r4t |¡ n
t |¡ t tj |	|
¡|¡ q–qˆW 5 Q R X d S )NÚ )rŠ   ÚpurelibÚplatlibÚdatac                 3   s   | ]}|  ˆ ¡V  qd S r‡   )Ú
startswith)r‚   Ús©Úddirr4   r5   rˆ   ÿ  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›   r™   rŸ   r»   Úlistdirr±   Úanyr¿   ÚwarningÚislinkr    ÚshutilÚrmtreeÚremoveÚmove)rj   r9   rÃ   rE   Úlib_dir_listÚschemeÚpurelib_dirÚplatlib_dirÚdata_dirÚlib_dirrÔ   Útarget_item_dirr4   rà   r5   rÁ   å  sP    


ýû
þz!InstallCommand._handle_target_dirc              
   C   s¸   zt |ƒ\}}W n$ tk
r4   tjddd� Y d S X |\}}|D ]2}|| d }|| D ]}t d|||d ¡ qZqB|D ]8}|| d }|| D ]\}	}
}t d||||	|
¡ q’qzd S )NzError checking for conflicts.Tr”   r   z*%s %s requires %s, which is not installed.r“   zF%s %s has requirement %s, but you'll have %s %s which is incompatible.)r   rº   r¿   rÀ   Úcritical)rj   rÎ   Úpackage_setÚ	_dep_infoÚmissingÚconflictingÚproject_nameÚversionÚ
dependencyÚdep_nameÚdep_versionr/   r4   r4   r5   r´     s4      þ    ýz$InstallCommand._warn_about_conflicts)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚusagerP   rÙ   rÁ   r´   Ú__classcell__r4   r4   rn   r5   r8   K   s     i8r8   c                  O   s   t d| ž|Ž}|d |d gS )NrÚ   rÛ   rÜ   )rÚ   r   )rk   Úkwargsrì   r4   r4   r5   rµ   8  s    rµ   c                  K   s   t dd„ ttf | ŽƒD ƒƒS )Nc                 s   s   | ]}t |ƒV  qd S r‡   r   )r‚   Údr4   r4   r5   rˆ   >  s    z)site_packages_writable.<locals>.<genexpr>)ÚallÚsetrµ   )r  r4   r4   r5   Úsite_packages_writable=  s    ÿr  Fc                 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
�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 disabled)r‰   rŽ   z0Non-user install because site-packages writeablezMDefaulting to user installation because normal site-packages is not writeable)
r¿   Údebugr   r   r   ÚAssertionErrorÚsiteÚENABLE_USER_SITEr  Úinfo)r?   rD   r9   rC   rq   r4   r4   r5   rž   C  s4    
ÿÿ




rž   c                 C   s®   dd„ }| j t| j ¡ ƒ }g }|D ]8}|j dg ¡}t|ƒ}|r$| d || 	¡ ƒ|¡¡ q$|r†t|ƒ}|r†| d || 	¡ ƒ¡¡ |sŽdS t
d d |¡¡d	d
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-   r4   r4   r5   r…   †  s     zKwarn_deprecated_install_options.<locals>.format_options.<locals>.<listcomp>r4   )Úoption_namesr4   r4   r5   Úformat_options„  s    z7warn_deprecated_install_options.<locals>.format_optionsr^   z{!r} from {}z{!r} from command lineNz}Location-changing options found in --install-option: {}. This configuration may cause unexpected behavior and is unsupported.z; zCusing pip-level options like --user, --prefix, --root, and --targetz20.2i�  )ÚreasonÚreplacementÚgone_inÚissue)Úunnamed_requirementsÚlistrS   r¯   rt   Úgetr   r»   r°   Úkeysr   r±   )rÇ   rt   r  rS   Ú	offendersÚrequirementr^   Úlocation_optionsr4   r4   r5   r§     sD    ÿÿ
 ÿÿ
ÿÿýó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â   Ú
z"Consider using the `--user` optionzCheck the permissionsz or z.
rÚ   )r»   ÚstrÚerrnoÚEACCESÚextendÚlowerr±   Ústrip)rÀ   r×   Úusing_user_siteÚpartsÚuser_option_partÚpermissions_partr4   r4   r5   r¾   ¶  s&    


 þ

r¾   )NNNF)PÚ
__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	   Úpip._internal.cli.status_codesr
   r   Úpip._internal.exceptionsr   r   r   Úpip._internal.locationsr   Úpip._internal.operations.checkr   Zpip._internal.reqr   r   Úpip._internal.req.req_trackerr   Úpip._internal.utils.deprecationr   Ú"pip._internal.utils.distutils_argsr   Úpip._internal.utils.filesystemr   Úpip._internal.utils.miscr   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%   r&   Ú#pip._internal.models.format_controlr'   Úpip._internal.req.req_installr(   r)   r*   Ú	getLoggerrü   r¿   r7   r8   rµ   r  rž   r§   r¾   r4   r4   r4   r5   Ú<module>   sb   
   p    û
<7