U jaSn@sHddlZddlZddlZddlZddlZddlmZmZddlm Z m Z m Z ddl m Z ddlmZddlmZddlmZddlmZmZmZdd lmZmZdd lmZmZdd lmZdd l m!Z!dd l"m#Z#ddl$m%Z%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6m7Z7m8Z8m9Z9ddl:m;Z;ddlZ>ddl?m@Z@mAZAmBZBe4eCZDe#e@dddZEGdddeZFd/eGe eHe eHeGe eHe eHd d!d"ZIe eHeGeGd#d$d%ZJd0e eGe eHe eHe eHeGeGd&d'd(ZKe e*e e eHdd)d*d+ZLeMeGeGeHd,d-d.ZNdS)1N) SUPPRESS_HELPValues)IterableListOptional)canonicalize_name) WheelCache) cmdoptions)make_target_python)RequirementCommandwarn_if_run_as_root with_cleanup)ERRORSUCCESS) CommandErrorInstallationError) get_scheme)get_environment) FormatControl)ConflictDetailscheck_install_conflicts)install_given_reqs)InstallRequirement)get_requirement_tracker)WINDOWS)parse_distutils_argstest_writable_dir) getLogger) ensure_dirget_pip_version(protect_pip_from_modification_on_windows write_output) TempDirectory)running_under_virtualenvvirtualenv_no_global)BinaryAllowedPredicatebuild should_build_for_install_command)format_controlreturncsttdfdd }|S)N)reqr*cs t|jp d}|}d|kS)Nbinary)rnameget_allowed_formats)r+canonical_nameallowed_formatsr)v/private/var/folders/k6/_7fsz4ts3b78x3b3xwrxjh_c8s8xv7/T/pip-unpacked-wheel-bug3gbve/pip/_internal/commands/install.pycheck_binary_allowed5s z6get_check_binary_allowed..check_binary_allowed)rbool)r)r5r3r2r4get_check_binary_allowed4sr7c@szeZdZdZdZddddZeeee e ddd Z e e e dd d d Zeeeed ddZee ddddZdS)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] [package-index-options] ... %prog [options] -r [package-index-options] ... %prog [options] [-e] ... %prog [options] [-e] ... %prog [options] ...N)r*cCsz|jt|jt|jt|jt|jt|jjdddddddt|j|jjddd d d |jjd dd t d |jjdddddd|jjdddddd|jt |jt |jjdddd dd |jjdddddgdd|jjddd d d |jjd!d"d#d d$d |jt |jt |jt|jt|jt|jt|jjd%d d&d'd(d)|jjd*d d&d+d,|jjd-d d.d'd/d)|jjd0d d1d'd2d)|jt|jt|jt|jt|jtttj|j}|jd3||jd3|jdS)4Nz-tz--target target_dirdirzInstall packages into . By default this will not replace existing files/folders in . Use --upgrade to replace existing packages in with new versions.)destmetavardefaulthelpz--user use_user_site store_truezInstall 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 --upgradeupgradezUpgrade all specified packages to the newest available version. The handling of dependencies depends on the upgrade-strategy used.z--upgrade-strategyupgrade_strategyzonly-if-neededeageraGDetermines 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-reinstallforce_reinstallz;Reinstall all packages even if they are already up-to-date.z-Iz--ignore-installedignore_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 --compilecompileTz'Compile Python source files to bytecode)rAr;r=r>z --no-compilez.Do not compile Python source files to bytecode)rAr;r>z--no-warn-script-locationwarn_script_locationz0Do not warn when installing scripts outside PATHz--no-warn-conflictswarn_about_conflictsz%Do not warn about broken dependenciesr)cmd_opts add_optionr requirements constraintsno_depspreeditableadd_target_python_optionsr build_dirsrcignore_requires_pythonno_build_isolation use_pep517 no_use_pep517install_optionsglobal_options no_binary only_binary prefer_binaryrequire_hashes progress_barmake_option_group index_groupparserinsert_option_group)self index_optsr3r3r4 add_optionsQs   zInstallCommand.add_options)optionsargsr*c( s"|jr|jdk rtdt|d}|jr2|j}tj|dd|jpHg}t dt t |j|j |j|j|jd|_d}d}|jrd|_tj|j|_tj|jrtj|jstdtdd }|j}|||jpg}||}t|} |j||| |jd } t|j|j} |t } t|j! d dd } zj|"||| |}t#||j|j$| || || |jd }|j%|| || |j|j|j|j&||j'd }|(| |j)||j d}z|*d}Wnt+k rd}Yn X|j,dk}t-|dt.| jfdd|j/0D}t1|| dggd\}}dd|D}|rNt2d3d4||D]}|j'sRd|_5qR|6|}d}|j7 o|j8}|r|9|}|j:}|js|j rd}t;||||j||j ||j|j|}|j?t@Addg} |D]V}!|!jB}"z(|C|"}#|#dk r>|"d|#jD}"WntEk rVYnX| F|"q|dk r|jG||H|dd 4| }$|$rtId!|$WnRtJk r}%z2|jKd"k}&tL|%|&|j}'t jM|'|&d#tNWYSd}%~%XYnX|jr|stO|P|j||jtQtRS)$Nz'Can not combine '--user' and '--target'zto-satisfy-onlyT) check_targetzUsing %s)rDr9rC isolated_modez=Target path exists but is not a directory, will not continue.target)kind)rjsession target_pythonrXinstall)deleteroglobally_managed)temp_build_dirrj req_trackerrpfinderr?) preparerrwrj wheel_cacher?rJrXrIrFrZ)check_supported_wheelspipF) modifying_pipcsg|]}t|r|qSr3)r(.0rr5r3r4 Os z&InstallCommand.run..)ryverify build_optionsr]cSsg|]}|jr|jqSr3)rZr.r}r3r3r4r`szPCould not build wheels for {} which use PEP 517 and cannot be installed directlyz, i )roothomeprefixrLr? pycompile)userrrrisolatedr.)key-)resolver_variant zSuccessfully installed %s)exc_info)Sr?r9rr check_install_build_globalrErFcheck_dist_restrictionr\loggerverboser decide_user_installrDrCrmrJospathabspathexistsisdirr# enter_contextr]get_default_sessionr _build_package_finderrXr cache_dirr)rno_cleanget_requirements'reject_location_related_install_optionsmake_requirement_preparer make_resolverrIrZtrace_basic_inforesolveget_requirementKeyError satisfied_byr!r7rPvaluesr'rformatjoinZlegacy_install_reasonget_installation_orderignore_dependenciesrM_determine_conflictsrLrrKget_lib_location_guessesrsortoperator attrgetterr.get_distributionversion Exceptionappend_warn_about_conflictsZdetermine_resolver_variantr"OSError verbositycreate_os_error_messageerrorrAssertionError_handle_target_dirr r)(rgrjrkrFr\target_temp_dirtarget_temp_dir_pathr]rprqrwryrv directoryreqsrxresolverrequirement_setpip_reqr| reqs_to_build_build_failuresZpep517_build_failure_namesr to_installZ conflictsshould_warn_about_conflictsrL installed lib_locationsenvitemsresultitemZinstalled_distinstalled_descrshow_tracebackmessager3rr4runsj                        zInstallCommand.run)r9rrEr*c sNt|g}td|jd}|j}|j}|j}tj|rB||tj|r`||kr`||tj|rv|||D]} t | D]} | |krtj || t fdd|ddDrqtj || } tj| r0|st d| qtj| r t d| qtj| r&t| n t| ttj | | | qqzdS)Nr,)rc3s|]}|VqdSN) startswith)r~sddirr3r4 sz4InstallCommand._handle_target_dir..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.)rrrpurelibplatlibdatarrrlistdirranyrwarningislinkrshutilrmtreeremovemove) rgr9rrE lib_dir_listscheme purelib_dir platlib_dirdata_dirlib_dirrtarget_item_dirr3rr4rsN        z!InstallCommand._handle_target_dir)rr*cCs0z t|WStk r*tdYdSXdS)NzwError while checking for conflicts. Please file an issue on pip's issue tracker: https://github.com/pypa/pip/issues/new)rrr exception)rgrr3r3r4rs z#InstallCommand._determine_conflicts)conflict_detailsrr*c Cs|\}\}}|s|sdSg}|dkr0|dn|dks.rr)allsetrrr3r3r4site_packages_writableSs  r)r?rDr9rCrmr*cCs|dk r|stddS|rF|r*tdtr8tdtddS|dksRt|sZ|rhtddStjs|td dSt||d rtd dSt d dS) aZDetermine 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 disabledrz0Non-user install because site-packages writeablezMDefaulting to user installation because normal site-packages is not writeable) rdebugrr%rrsiteENABLE_USER_SITErinfo)r?rDr9rCrmr3r3r4rZs4         r)rPrjr*cCsttttddd}g}|D]0}|j}t|}|r |d|||q |rzt|}|rz|d|||sdStdd |dS) zIf any location-changing --install-option arguments were passed for requirements or on the command-line, then show a deprecation warning. ) option_namesr*cSsdd|DS)NcSsg|]}d|ddqS)z--{}rr)rreplace)r~r.r3r3r4rszSreject_location_related_install_options..format_options..r3)r r3r3r4format_optionssz?reject_location_related_install_options..format_optionsz {!r} from {}z{!r} from command lineNzLocation-changing options found in --install-option: {}. This is unsupported, use pip-level options like --user, --prefix, --root, and --target instead.z; ) rrrr\rrrkeysrr)rPrjr  offendersrr\location_optionsr3r3r4rs6  r)rrusing_user_siter*cCsg}|d|s,|d|t|n |d|dd7<|jtjkrd}d}tsz|sz||d|gn |||d tr|jtjkr|j rt |j d kr|d d | dS) 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: .rrz"Consider using the `--user` optionzCheck the permissionsz or z. izHINT: 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,) rrerrnoEACCESr$extendlowerrENOENTfilenamelenrstrip)rrrruser_option_partpermissions_partr3r3r4rs2        r)FNNFN)NNNF)Orrrrroptparserrtypingrrrpip._vendor.packaging.utilsrpip._internal.cacherZpip._internal.clir Zpip._internal.cli.cmdoptionsr pip._internal.cli.req_commandr r r pip._internal.cli.status_codesrrpip._internal.exceptionsrrpip._internal.locationsrZpip._internal.metadatar#pip._internal.models.format_controlrpip._internal.operations.checkrrZpip._internal.reqrZpip._internal.req.req_installrpip._internal.req.req_trackerrpip._internal.utils.compatr"pip._internal.utils.distutils_argsrpip._internal.utils.filesystemrpip._internal.utils.loggingrpip._internal.utils.miscrr r!r"pip._internal.utils.temp_dirr#pip._internal.utils.virtualenvr$r%pip._internal.wheel_builderr&r'r(rrr7r8r6rrrrrrrr3r3r3r4s                    <  +