2bid` "SSKrSSKrSSKrSSKrSSKJr SSKJrJrJ r J r J r J r J r JrJr SSKJr SSKJrJr SSKJr SSKJr SSKJr SS KJrJr SS KJrJ r J!r!J"r" SS K#J$r$J%r% SS K&J'r' \"\(5r)S \*S\*S\+S\ \*SS44Sjr,S\S\ \SS44S\S\ \SS444Sjr-\-S\S\ \*SS44Sj5r.S\ \*S\\*4Sjr/S\ \*S\\*4Sjr0S\ \*S\\\*\\*44Sjr1"SS5r2"SS5r3"SS 5r4g)!N)cache_from_source) AnyCallableDict GeneratorIterableListOptionalSetTuple)UninstallationError)get_bin_prefix get_bin_user)BaseDistribution)WINDOWS)egg_link_path_from_location) getLogger indent_log)asknormalize_pathrenamesrmtree)AdjacentTempDirectory TempDirectory)running_under_virtualenvbin_dir script_nameis_guireturnc## [RRX5nUv [(dgUS3v US3v U(aUS3v gUS3v g7f)zCreate the fully qualified name of the files created by {console,gui}_scripts for the given ``dist``. Returns the list of file names Nz.exez .exe.manifestz -script.pywz -script.py)ospathjoinr)rrrexe_names ڑ/builddir/build/BUILDROOT/alt-python313-pip-23.3.1-3.el8.x86_64/opt/alt/python313/lib/python3.13/site-packages/pip/_internal/req/req_uninstall.py _script_namesr&s]ww||G1H N 7 Jd  Jm $$  +&& *%%sAAfn.c ^[R"T5S[S[S[[SS44U4Sjj5nU$)Nargskwrc?x># [5nT"U0UD6HnX2;dM URU5 Uv M! g7fN)setadd)r)r*seenitemr's r%unique_unique..unique+s5OOD $s::) functoolswrapsrr)r'r1s` r%_uniquer5(sG__Rc3d?)C Mdistc## URnUcS5eUR5nUcSRUS9nURnU(aUS:Xa;SRURUR 5nUSRU5- nOUSRU5- n[ U5eUHn[RRX5nUv URS 5(dM>[RRU5upU SS n [RRXS -5nUv [RRXS -5nUv M g7f) a Yield all the uninstallation paths for dist based on RECORD-without-.py[co] Yield paths to all the files in RECORD. For each .py file in RECORD, add the .pyc and .pyo in the same directory. UninstallPathSet.add() takes care of the __pycache__ .py[co]. If RECORD is not found, raises UninstallationError, with possible information from the INSTALLER file. https://packaging.python.org/specifications/recording-installed-packages/ Nz not installedz/Cannot uninstall {dist}, RECORD file not found.)r7pipz{}=={}zZ You might be able to recover from this via: 'pip install --force-reinstall --no-deps {}'.z' Hint: The package was installed by {}..py.pyc.pyo) locationiter_declared_entriesformat installerraw_nameversionr r!r"r#endswithsplit) r7r>entriesmsgrAdepentryr"dnr'bases r%uninstallation_pathsrL6s3}}H  00 ((*G?FFDFQNN I.//$-->C @@Fs  C <CCIN NC!#&&ww||H, ==  WW]]4(FBcr7D77<<6M2DJ77<<6M2DJs C(E%.A7E%pathsc^^[RRm[5n[ U[ S9H3m[ UU4SjU55nU(aM"URT5 M5 U$)zCompact a path set to contain the minimal number of paths necessary to contain all paths in the set. If /a/path/ and /a/path/to/a/file.txt are both in the set, leave only the shorter path.keyc3># UH[nTRURS55=(a/ T[URS5RT55T:Hv M] g7f)*N) startswithrstriplen).0 shortpathr"seps r% compact..ksb )  OOI,,S1 2 DS))#.55c:;<C D(sA#A&)r!r"rXr-sortedrUanyr.)rM short_paths should_skipr"rXs @@r%compactr_bs^ ''++CEKu#& )  { OOD !' r6cH^ ^ ^ UVs0sH#n[RRU5U_M% nn[U5n[ UR 5Vs1sH%n[RR U5SiM' sn[S9n[5nS[S[4Sjm UHm [U 4SjU55(aM[5n[5n[R"T 5H@um pURU U U 4SjU55 URU U U 4SjU 55 MB Xc- (aMURU5 URT [R-5 M [[UR U55U-$s snfs snf) zReturns a set containing the paths that need to be renamed. This set may include directories when the original sequence of paths included every file on disk. rrOarcv[RR[RR"U65$r,)r!r"normcaser#)ras r% norm_join&compress_for_rename..norm_joins$ww a 011r6c3># UH3n[RRT5RU5v M5 g7fr,)r!r"rcrS)rVwroots r%rY&compress_for_rename..s.GYrww%0033Ys;>c38># UHnT"TTU5v M g7fr,)rVddirnamerdrhs r%rYrisLGqyw::Gc38># UHnT"TTU5v M g7fr,rk)rVfrmrdrhs r%rYrisH%QYtWa88%rn)r!r"rcr-r[valuesrErUstrr\walkupdatedifference_updater.rXmap __getitem__) rMpcase_map remaining unchecked wildcards all_files all_subdirssubdirsfilesrmrdrhs @@@r%compress_for_renamerusG 1661  #Q&H6H IX__5FG5F a(+5FGSQI%I2c2c2 GYG G G !e # ')wwt} #GW   LGL L   H%H H(5 %%  ' ' 2 MM$- (" s8''3 4y @@37Gs *F,Fc[U5n[5n[5n[5nUHvnURS5(aMURS5(dSU;a.UR[RR U55 URU5 Mx [[ [RRU55n[U5nUHn[R"U5Hupn U Hn U RS5(aM[RRX5n [RRU 5(dM`[RRU 5U;dMURU 5 M M M XCVs1sH#n[RRUS5iM% sn-nX4$s snf)a[Returns a tuple of 2 sets of which paths to display to user The first set contains paths that would be deleted. Files of a package are not added and the top-level directory of the package has a '*' added at the end - to signify that all it's contents are removed. The second set contains files that would have been skipped in the above folders. r<z __init__.pyz .dist-inforR) r-rDr.r!r"rmrvrcr_rsr#isfile) rM will_remove will_skipfoldersrr"_normcased_filesfolderdirpath_dirfilesfnamefile_s r%compress_for_output_listingrsee*KIeG EE ==  == ' '<4+? KK- . $ 3rww//78gG$&GGFO G!>>&)) W4GGNN5))((/7GGMM%("%47K7277<<47KKK  !!Ls'*Gc\rSrSrSrSSjrS\S\4SjrS\S\4SjrS\S\4S jr SS jr SS jr \ S\ 4S j5rS rg)StashedUninstallPathSetzSA set of file rename operations to stash files while tentatively uninstalling them.rNc 0Ul/Ulgr,) _save_dirs_movesselfs r%__init__ StashedUninstallPathSet.__init__s57.0 r6r"c[U5nX R[R R U5'UR $![a [SS9nNLf=f)zStashes a directory. Directories are stashed adjacent to their original location if possible, or else moved/copied into the user's temp dir. uninstallkind)rOSErrorrrr!r"rc)rr"save_dirs r%_get_directory_stash,StashedUninstallPathSet._get_directory_stashsS  7&;D&AH3;((./}}  7$+6H 7s AAAc[RRU5n[RRU5Sp2SnX#:waURUnO6[RRU5n[ SS9nX@RU'[RRX5nU(aHU[RR:wa*[RRURU5$UR$![ a Of=f[RRU5Up2X#:waMN)zrStashes a file. If no root has been provided, one will be created for the directory in the user's temp directory.Nrr) r!r"rcrmrKeyErrorrrelpathcurdirr#)rr"headold_headrrs r%_get_file_stash'StashedUninstallPathSet._get_file_stashs ww%.h ??40 77??4(D$+6H$,OOD !''//$- w"''..077<< w7 7}}  WW__T2D( sD DDc[RRU5=(a$ [RRU5(+nU(aUR U5nOUR U5nUR RX45 U(a:[RRU5(a[R"U5 [X5 U$)z}Stashes the directory or file and returns its new location. Handle symlinks as files to avoid modifying the symlink targets. ) r!r"isdirislinkrrrappendrmdirr)rr" path_is_dirnew_paths r%stashStashedUninstallPathSet.stashsggmmD)F"''..2F.F 006H++D1H D+, 277==22 HHX r6cURR5HnUR5 M /Ul0Ulg)z0Commits the uninstall by removing stashed files.N)rrqcleanupr)rrs r%commitStashedUninstallPathSet.commits3..0H    1 r6cURHn[R"S/UQ76 M URHup#[RSX#5 [R R U5(d$[R RU5(a[R"U5 O/[R RU5(a [U5 [X25 M UR5 g![a8n[RSU5 [RSU5 SnAGMSnAff=f)z2Undoes the uninstall by moving stashed files back.zMoving to %s from %szReplacing %s from %szFailed to restore %sz Exception: %sN)rloggerinfodebugr!r"rrunlinkrrrrerrorr)rrxrr"exs r%rollback StashedUninstallPathSet.rollbacksA KK0 51 5#kkNH 2 3XD77>>(++rww~~h/G/GIIh'WW]]8,,8$'*  2 3X> _b11 2sB/D E ,D>>Ec,[UR5$r,)boolrrs r% can_rollback$StashedUninstallPathSet.can_rollback-sDKK  r6)rrrN)__name__ __module__ __qualname____firstlineno____doc__rrrrrrrrpropertyrr__static_attributes__rkr6r%rrsj&0   CC6##*&!d!!r6rc\rSrSrSrS\SS4SjrS\S\4Sjr S\SS4S jr S \S \SS4S jr SS \S\SS4Sjjr S\S\4Sjr SSjrSSjr\S\SS4Sj5rSrg)UninstallPathSeti2zIA set of file paths to be removed in the uninstallation of a requirement.r7rNc[5Ul[5Ul0UlXl[ 5Ul[R"5"[5Ul gr,) r-_paths_refuse_pth_distr _moved_pathsr3 lru_cacher_normalize_path_cached)rr7s r%rUninstallPathSet.__init__6sC # !$ 46  35'0&9&9&;N&K#r6r"c~[5(dgURUR[R55$)z[ Return True if the given path is one we are permitted to remove/modify, False otherwise. T)rrSrsysprefix)rr"s r% _permittedUninstallPathSet._permittedAs.())t::3::FGGr6cD[RRU5up#[RRUR U5[RR U55n[RR U5(dgURU5(aURRU5 OURRU5 [RRU5SS:XaUR[U55 gg)Nr:) r!r"rEr#rrcexistsrrr.rsplitextr)rr"rtails r%r.UninstallPathSet.addLsWW]]4( ww||D77=rww?O?OPT?UVww~~d##  ??4 KKOOD ! LL  T " 77  D !! $ - HH&t, - .r6pth_filerIcURU5nURU5(aFXR;a[U5URU'URUR U5 gUR R U5 gr,)rrrUninstallPthEntriesr.r)rrrIs r%add_pthUninstallPathSet.add_pth_sg..x8 ??8 $ $yy(&9(&C (# IIh  # #E * LL  X &r6 auto_confirmverbosecUR(d+[RSURR5 gURRSURR 3n[RSU5 [ 5 U(dURU5(aURn[UR5n[[U55H*nURU5 [RSU5 M, URR5HnUR!5 M [RSU5 SSS5 g!,(df  g=f)zTRemove paths in ``self._paths`` with confirmation (unless ``auto_confirm`` is True).z7Can't uninstall '%s'. No files were found to uninstall.N-zUninstalling %s:zRemoving file or directory %szSuccessfully uninstalled %s)rrrrrBrCr_allowed_to_proceedrrr[r_rrrrqremove)rrrdist_name_versionmoved for_renamer"pths r%rUninstallPathSet.removehs{{ KKI ##  #zz2231TZZ5G5G4HI &(9: \t77@@))0= "7:#67DKK%NN#BDI8 99++-CJJL. 9;LM\\s CE E+c`S[S[[SS4SjnU(d[UR5up4O[ UR5n[ 5nU"SU5 U"SU5 U"SUR 5 U(aU"S [ UR55 [S S 5S :g$) z@Display which files would be deleted and prompt for confirmationrGrMrNcU(dg[RU5 [5 [[ U55Hn[RU5 M SSS5 g!,(df  g=fr,)rrrr[r_)rGrMr"s r%_display6UninstallPathSet._allowed_to_proceed.._displaysB KK "75>2DKK%3s 1A"" A0z Would remove:z+Would not remove (might be manually added):z%Would not remove (outside of prefix):zWill actually move:zProceed (Y/n)? )ynr)rrrrrr-rrr)rrrrrs r%r$UninstallPathSet._allowed_to_proceeds &# &hsm & &%@%M "Kdkk*KI+.> J8$,,G  *,? ,L M$n5<.iter_scripts_to_removeCsi $557 $$(99,W6F6FNNN &&-7,W6F6FMMM 8NMs(=A?A;A?A?1A=2 A?=A?)3r> info_locationrrcanonical_namerlocalrr sysconfigget_pathrrB"installed_with_setuptools_egg_infor!r"rrDsetuptools_filenamer.r?r#is_file read_text splitlinesFileNotFoundErrorinstalled_by_distutilsr r@installed_as_eggrErmrinstalled_with_dist_inforLopenrcreadlinestriprsamefiler in_usersiterriter_distutils_script_namesrNotADirectoryErrorrrrr)clsr7 dist_locationr normalized_dist_locationrxpaths_to_removedevelop_egg_linksetuptools_flat_installationinstalled_filesinstalled_filenamespace_packages namespaces top_level_pkgr"easy_install_eggeasy_install_pthfh link_pointernormalized_link_pointerrscriptr ss r% from_distUninstallPathSet.from_distsu **  KK?## t9 #1-#@ zz KKC##(   t9  #((2I4F4F|4TU( U U(  KKN##(  t9 d)6t}}E  3 3 ST) S}- S "**d.F.F-Gy+QRR % ((##M2"88:O*&5N#'' ](ST'6 o..O)-8P)Q&"4!>!>!>!NJ"^^O<GGI&I0I&M 77<< ED#''-#''4& 5#''4& 6#''4& 6& ( (%FFLfMMG  " "    .!ww}}];A> !ww|| ."    # #$4d=M6M N  * *,T2##D)3&'2!ww// 0C0C0EF *9*P*P +'( 77##')A ,-U<.A))-u]O1N     0 1!ww|| 013E    # #$4m D LL;    "nG$&G ::<##BGGLL&$AB7#'' Wo(NO= N" N NsD$ ' N(g6A    "7S( T)$!#J$&N('F"#56   sV W9W9W> XX%X9A X0A X(?6X(> X X X%(X;:X;)rrrrrr)FFr)rrrrrrrrrrrr.rrrrr classmethodr2rrkr6r%rr2s L- L$ L Hs Ht H...&''C'D'N4N$N4N:=4=D=8 #]-]2D]]r6rcP\rSrSrS\SS4SjrS\SS4SjrS SjrS\4S jr S r g) riSrrNc<Xl[5UlSUlgr,)filer-rF _saved_lines)rrs r%rUninstallPthEntries.__init__Ts !$ 37r6rIc[RRU5n[(a9[RR U5S(dUR SS5nUR RU5 g)Nr\/)r!r"rcr splitdrivereplacerFr.)rrIs r%r.UninstallPthEntries.addYsU  ' 7277--e4Q7MM$,E r6ct[RSUR5 [RR UR5(d![R SUR5 g[URS5nUR5nX l SSS5 [SW55(aSnOSnU(aBUSRURS55(dUSURS5-US'URH<n[RS U5 URXC-RS55 M> [URS 5nUR!U5 SSS5 g!,(df  N=f![a Mf=f!,(df  g=f) NzRemoving pth entries from %s:z.Cannot remove entries from nonexistent file %srbc3,# UH nSU;v M g7f)s Nrk)rVlines r%rY-UninstallPthEntries.remove..ss154w$5sz  zutf-8zRemoving entry: %swb)rrr7r!r"rwarningr readlinesr8r\rDencoderFr ValueError writelines)rr-linesendlinerIs r%rUninstallPthEntries.removehsF6 Bww~~dii(( NNKTYY W  $))T "bLLNE % # 151 1 1GG r++GNN7,CDDb GNN7$;;E"I\\E 3U; eo55g>?" $))T "b MM% # "## "   " "s*F8F,F) F F&%F&) F7c6URc![RSUR5 g[R SUR5 [ URS5nUR UR5 SSS5 g!,(df  g=f)Nz.Cannot roll back changes to %s, none were madeFz!Rolling %s back to previous staterGT)r8rrr7rrrL)rr-s r%rUninstallPthEntries.rollbacksm    $ LLI499 U 8$))D $))T "b MM$++ ,## "s %B  B)r8rFr7r) rrrrrrrr.rrrrrkr6r%rrSs9888      !6$r6r)5r3r!rrimportlib.utilrtypingrrrrrr r r r pip._internal.exceptionsr pip._internal.locationsrrpip._internal.metadatarpip._internal.utils.compatrpip._internal.utils.egg_linkrpip._internal.utils.loggingrrpip._internal.utils.miscrrrrpip._internal.utils.temp_dirrrpip._internal.utils.virtualenvrrrrrrr&r5rLr_rrrrrrkr6r%r]sk ,WWW8@3.D=IIMC 8 & &"&,0&sD$&& iT4001  c9S$_--.  (/(Ic4o4N( (V8C=SX&Ax}ASAD/"x}/"s3xS?Q9R/"df!f!R^^B 77r6