관리-도구
편집 파일: install.cpython-39.pyc
a [��f�l � @ sH d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm Z m Z mZ d dlm Z d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d lmZmZ d d lmZmZ d dlmZ d dl m!Z! d d l"m#Z# d dl$m%Z%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z> d dl?m@Z@mAZAmBZB e4eC�ZDe#e@d�dd�ZEG dd� de�ZFd/eGeeH eeH eGeeH e eH d �d!d"�ZIeeH eGeGd#�d$d%�ZJd0eeG eeH eeH eeH eGeGd&�d'd(�ZKe e* ee eH dd)�d*d+�ZLeMeGeGeHd,�d-d.�ZNdS )1� 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 t td�� fdd�}|S )N)�reqr* c s t | jp d�}� �|�}d|v S )N� Zbinary)r �nameZget_allowed_formats)r+ Zcanonical_nameZallowed_formats�r) � �B/usr/lib/python3.9/site-packages/pip/_internal/commands/install.py�check_binary_allowed5 s z6get_check_binary_allowed.<locals>.check_binary_allowed)r �bool)r) r1 r/ r. r0 �get_check_binary_allowed4 s r3 c @ sz e Zd ZdZdZdd�dd�Zeeee e d�dd ��Ze ee dd �dd�Zee ee d �dd�Zee dd�dd�ZdS )�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)r* c C sj | j �t�� � | j �t�� � | j �t�� � | j �t�� � | j �t�� � | j jddddd dd� t�| j � | j jddd d d� | j jddd t d� | j jdddd dd� | j jdddd dd� | j �t� � � | j jdddd dd� | j jdddddgdd� | j jddd d d� | j jd!d"d#d d$d� | j �t�� � | j �t�� � | j �t� � � | j �t�� � | j �t�� � | j �t�� � | j jd%d d&d'd(d)� | j jd*d d&d+d,� | j jd-d d.d'd/d)� | j jd0d d1d'd2d)� | j �t�� � | j �t�� � | j �t�� � | j �t�� � | j �t�� � t�tj| 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.))r7 �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_strategyzonly-if-neededZeageraG 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).)r7 r9 �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= r7 r9 r: z--no-compilez.Do not compile Python source files to bytecode)r= r7 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 )Zcmd_optsZ add_optionr �requirements�constraintsZno_depsZpreZeditableZadd_target_python_optionsr �src�ignore_requires_pythonZno_build_isolation� use_pep517Z no_use_pep517�install_options�global_optionsZ no_binaryZonly_binaryZ prefer_binaryZrequire_hashesZprogress_barZmake_option_groupZindex_group�parserZinsert_option_group)�selfZ index_optsr/ r/ r0 �add_optionsQ s� � �������� �����zInstallCommand.add_options)�options�argsr* c ) s. |j r|jd urtd��t�|� d}|jr2|j}tj|dd� |jpHg }t � dt� � t|j |j |j|j|jd�|_ d }d }|jr�d|_tj�|j�|_tj�|j�r�tj�|j�s�td��tdd �}|j}| �|� |jp�g }| �|�}t|�} | j||| |jd �} t|j|j�}| �t � �}t|j! ddd�} �zx| �"||| |�}|D ]}d|_#�qLt$||j� | j%| |||| |j d �}| j&|| |||j |j|j|j'||j(d� }| �)| � |j*||j d�}z|�+d�}W n t,�y� d}Y n0 |j-d u }t.|d� t/| j�� � fdd�|j0�1� D �}t2||dg g d�\}}dd� |D �}|�r^t3d�4d�5|����|D ]}|j(�sbd|_6�qb|�7|�}d }|j8 �o�|j9}|�r�| �:|�}|j;}|j�s�|j �r�d}t<||||j||j ||j |j=d� }t>|j ||j|j |jd�}t?|�} |j@tA�Bd�d� g }!|D ]T}"|"jC}#z(| �D|#�}$|$d u�rN|#� d|$jE� �}#W n tF�yd Y n0 |!�G|#� �q|d u�r�| jH|| �I|�d� d �5|!�}%|%�r�tJd!|%� W nP tK�y� }& z6| jLd"k}'tM|&|'|j �}(t jN|(|'d#� tOW Y d }&~&S d }&~&0 0 |j�r$|�sJ �| �P|j||j� tQ� tRS )$Nz'Can not combine '--user' and '--target'zto-satisfy-onlyT)Zcheck_targetzUsing %s)r@ r5 r? � isolated_modez=Target path exists but is not a directory, will not continue.�target)�kind)rS �session� target_pythonrL �install)�deleterW Zglobally_managed)Ztemp_build_dirrS �req_trackerrX �finderr; ) �preparerr] rS �wheel_cacher; rE rL rD rB rM )Zcheck_supported_wheelsZpipF)� modifying_pipc s g | ]}t |� �r|�qS r/ )r( ��.0�r�r1 r/ r0 � <listcomp>b s �z&InstallCommand.run.<locals>.<listcomp>)r_ ZverifyZ build_optionsrO c S s g | ]}|j r|j�qS r/ )rM r- ra r/ r/ r0 re r s zYCould not build wheels for {}, which is required to install pyproject.toml-based projectsz, i� )�root�home�prefixrG r; Z pycompile)�userrg rf rh �isolatedr- )�key�-)�resolver_variant� zSuccessfully installed %s� )�exc_info)Sr; r5 r r Zcheck_install_build_globalrA rB Zcheck_dist_restrictionrN �logger�verboser �decide_user_installr@ r? rU rE �os�path�abspath�exists�isdirr# � enter_contextrO Zget_default_sessionr Z_build_package_finderrL r Z cache_dirr) r Zno_cleanZget_requirementsZpermit_editable_wheels�'reject_location_related_install_optionsZmake_requirement_preparerZ make_resolverrD rM Ztrace_basic_info�resolveZget_requirement�KeyErrorZsatisfied_byr! r3 rI �valuesr'