
    9fM                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJrJ	r	J
r
JrJrJrJr  \(       a  S SKJr   S SKJrJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJ r   S SK!J"r"J#r#J$r$J%r%  S SK&J'r'J(r(  S SK)J*r*  S SK+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5  S SK6J7r7J8r8  \Rr                  " \:5      r;\Rx                  " S\Rz                  5      r> " S S5      r? " S S5      r@g! \ a    S SKJrJr   Nf = f)    N)Path)TYPE_CHECKINGDict	GeneratorListNoReturnOptionalSet)CompletedProcess)Distribution
EntryPoint)canonicalize_name)animate)PIPX_SHARED_PTHExitCode)hazard)DEFAULT_PYTHON)fix_package_name
get_extrasparse_specifier_for_installparse_specifier_for_metadata)PackageInfoPipxMetadata)shared_libs)
	PipxErrorexec_appfull_package_descriptionget_site_packagesget_venv_paths	pipx_wraprmdirrun_subprocesssubprocess_post_check&subprocess_post_check_handle_pip_error)VenvMetadatainspect_venvz[
    ^(?P<module>[\w.]+)\s*
    (:\s*(?P<attr>[\w.]+))?\s*
    (?P<extras>\[.*\])?\s*$
    c                   n    \ rS rSrSrS\4S jrS\4S jrS\4S jr	S\
\SS4   4S	 jrS
\S\4S jrSrg)VenvContainer9   z&A collection of venvs managed by pipx.rootc                     Xl         g N_root)selfr*   s     +/usr/lib/python3/dist-packages/pipx/venv.py__init__VenvContainer.__init__<   s    
    returnc                 6    S[        U R                  5      < S3$ )NzVenvContainer()strr.   r/   s    r0   __repr__VenvContainer.__repr__?   s    DJJ2!44r3   c                 ,    [        U R                  5      $ r,   r7   r9   s    r0   __str__VenvContainer.__str__B   s    4::r3   Nc              #      #    U R                   R                  5       (       d  gU R                   R                  5        H  nUR                  5       (       d  M  Uv   M      g7f)z+Iterate venv directories in this container.N)r.   is_diriterdir)r/   entrys     r0   iter_venv_dirsVenvContainer.iter_venv_dirsE   sE     zz  ""ZZ'')E<<>>K *s   AA package_namec                 J    U R                   R                  [        U5      5      $ )z7Return the expected venv path for given `package_name`.)r.   joinpathr   r/   rE   s     r0   get_venv_dirVenvContainer.get_venv_dirN   s    zz""#4\#BCCr3   r-   )__name__
__module____qualname____firstlineno____doc__r   r1   r8   r:   r=   r   rC   rI   __static_attributes__ r3   r0   r(   r(   9   sW    0T 5# 5 	$d*: ; D D Dr3   r(   c                   
   \ rS rSrSrS\S.S\S\S\SS	4S
 jjr	S9S\S\
\   S\4S jjr\S\4S j5       r\S\4S j5       r\S\\\4   4S j5       r\S\4S j5       rS9S\
\   S\
\   S\SS	4S jjrS\4S jrS:S jrS\
\   SS	4S jrS9S\S\4S jjr S;S\S\S\
\   S\S\S\S \SS	4S! jjrS"\
\   S\
\   SS	4S# jrS\S\
\   S\4S$ jrS\S%\\   S\4S& jr  S<S\S\S\
\   S\S\S\S \S'\SS	4S( jjrS\4S) jrS9S\\   4S* jjr S+\S\!\"   4S, jr#S+\S-\S.\
\   S\$4S/ jr%S+\S-\S\4S0 jr&S\S\4S1 jr'S\S\
\   SS	4S2 jr( S;S\S\S\
\   S\S\S\S \SS	4S3 jjr)S4\
\   SS54S6 jr*S4\
\   S\+4S7 jr,S8r-g	)=VenvS   zJAbstraction for a virtual environment with various useful methods for pipxF)verbosepythonpathrU   rV   r4   Nc                   Xl         X0l        [        U R                   5      u  U l        U l        U l        [        US9U l        X l        U(       + U l	         U R                   R                  5       =(       a,    [        [        U R                   R                  5       5      5      U l        g ! [         a
    SU l         g f = f)N)venv_dirF)r*   rV   r   bin_pathpython_pathman_pathr   pipx_metadatarU   do_animationexistsboolnextrA   	_existingStopIteration)r/   rW   rU   rV   s       r0   r1   Venv.__init__V   s    	9G		9R6t')48 'K	#!YY--/SDdii>O>O>Q9R4SDN 	#"DN	#s   AB) )B=<B=pip_argsforce_upgradec                    U R                   (       a  U R                  (       a  [        R                  (       a1  U(       d  [        R                  (       a  [        R
                  " XS9  O[        R                  " XS9  [        R                  (       d@  [        [        S[        R                   S35      SU R                  R                   S3-   SS9eggg)	a.  
If necessary, run maintenance tasks to keep the shared libs up-to-date.

This can trigger `pip install`/`pip install --upgrade` operations,
so we expect the caller to provide sensible `pip_args`
( provided by the user in the current CLI call
or retrieved from the metadata of a previous installation)
rU   re   z3
                        Error: pipx's shared venv z is invalid
                        and needs re-installation. To fix this, install or
                        reinstall a package. For example:
                        z
  pipx install z --forceFwrap_messageN)rb   uses_shared_libsr   is_validneeds_upgradeupgradecreater   r    r*   name)r/   rU   re   rf   s       r0   check_upgrade_shared_libsVenv.check_upgrade_shared_libsb   s     >>d33## K$=$=''K""7F''33>3C3C2D E *$))..)9BC "'
 
 ( 4>r3   c                     U R                   R                  R                  bD  U R                   R                  R                   U R                   R                  R                   3nU$ U R                  R
                  nU$ r,   )r]   main_packagepackagesuffixr*   rp   )r/   	venv_names     r0   rp   	Venv.name   sk    **22>--::BBCDDVDVDcDcDjDjCklI  		Ir3   c                     U R                   (       a0  U R                  R                  S[        -   5      n[	        US 5      S L$ g)Nz**/T)rb   r*   globr   ra   )r/   	pth_filess     r0   rk   Venv.uses_shared_libs   s7    >>		u'>?I	4(44 r3   c                     U R                   R                  R                  5       nU R                   R                  R                  b6  U R                   R                  XR                   R                  R                  '   U$ r,   )r]   injected_packagescopyrt   ru   )r/   return_dicts     r0   package_metadataVenv.package_metadata   s`    ((::??A**22>CGCUCUCbCbK**77??@r3   c                     U R                   R                  R                  c  U R                  R                  $ U R                   R                  R                  $ r,   )r]   rt   ru   r*   rp   r9   s    r0   main_package_nameVenv.main_package_name   sB    **22: 99>>!%%22:::r3   	venv_argsoverride_sharedc                    [         R                  S5        [        SU R                  5         U R                  SS/nU(       d  UR                  S5        [        XA-   [        U R                  5      /-   [        U R                  5      S9nSSS5        [        W5        [        R                  " U R                  US9  U(       d=  [        U R                  5      [        -  nUR!                  [        R"                   S	3S
S9  XR$                  l        U R)                  5       U R$                  l        [,        R.                  " U R                  5      nU(       a  [1        U5      U R$                  l        gg! , (       d  f       N= f)zf
override_shared -- Override installing shared libraries to the pipx shared directory (default False)
zCreating virtual environmentzcreating virtual environment-mvenvz--without-piprun_dirNrh   
zutf-8)encoding)loggerinfor   r^   rV   appendr"   r8   r*   r#   r   ro   rU   r   r[   r   
write_textsite_packagesr]   r   get_python_versionpython_versionshutilwhichr   source_interpreter)r/   r   re   r   cmdvenv_processpipx_pthr   s           r0   create_venvVenv.create_venv   s'    	233T5F5FG;;f-C"

?+)#/S^<L*LVYZ^ZcZcVdeL	 H
 	l+4<<(C()9)9:_LH ;#<#<"=R @7S'0$,0,C,C,E)#\\$++6489K4LD1 1 HGs   AE22
F c                 $    U R                   (       + $ r,   )rb   r9   s    r0   safe_to_removeVenv.safe_to_remove   s    >>!!r3   c           	          U R                  5       (       a  [        U R                  5        g [        R	                  [        S[         SU R                   S3SS95        g )Nz
                    z  Not removing existing venv zT because it
                    was not created in this session
                    z    )subsequent_indent)r   r!   r*   r   warningr    r   r9   s    r0   remove_venvVenv.remove_venv   sV      $))NNH9$)) E '.r3   c                     U R                   (       a  [        R                  " XR                  S9  g U R	                  SU5        g )N)re   rU   pip)rk   r   rn   rU   upgrade_package_no_metadata)r/   re   s     r0   upgrade_packaging_libraries Venv.upgrade_packaging_libraries   s/      <<H ,,UH=r3   ru   was_injectedc                     [         R                  SU5        [        SU 3U R                  5         SS/U/-   nU R	                  U5        S S S 5        U(       a@  U R                  R                  R                  U5        U R                  R                  5         g g ! , (       d  f       NV= f! [
         a*  n[         R                  U5        [        SU S35      S eS nAff = f)NzUninstalling %szuninstalling 	uninstallz-yzError uninstalling .)
r   r   r   r^   _run_pipr   r]   r~   popwrite)r/   ru   r   r   es        r0   uninstall_packageVenv.uninstall_package   s    	HKK)73=	2D4E4EF"D)WI5c" G 0044W=$$&  GF  	HKKN1'!<=4G	Hs4   /B, BB, 
B)%B, )B, ,
C 6%CC rE   package_or_urlinclude_dependenciesinclude_appsis_main_packagerv   c           
      J   [        X!5      n[        X#5      u  p#[        R                  S[	        X5      =n5        [        SU 3U R                  5         [        U R                  5      SSSS/UQUPn	[        U	SS[        U R                  5      S9n
S S S 5        [        W
5        U
R                  (       a  [        S	[	        X5       S
35      eU R                  UUUUUUUS9  U R                  U   R                   c  [        S[	        X5       S3SS9eg ! , (       d  f       N= f)NInstalling %sinstalling r   r   
--no-inputinstallF
log_stdout
log_stderrr   Error installing r   rE   r   re   r   r   r   rv   zUnable to install zR.
Check the name or spec for errors, and verify that it can be installed with pip.ri   )r   r   r   r   r   r   r^   r8   r[   r"   r*   r$   
returncoder   update_package_metadatar   package_version)r/   rE   r   re   r   r   r   rv   package_descrr   pip_processs              r0   install_packageVenv.install_package   sV    *.G &A%Z"O6N|6l%l]m{=/2D4E4EF D$$%  C )5Z]^b^g^gZhiK G 	/{;!!/0H0f/gghijj$$%)!5%+ 	% 	
   .>>F$+LIJ K)* #  G= GFs   >D
D"requirementsc           	         [         R                  SSR                  U5      =n5        [        SU 3U R                  5         [        U R                  5      SSSS/UQUQn[        USS[        U R                  5      S	9nS
S
S
5        [        W5        UR                  (       a  [        SSR                  U5       S35      eg
! , (       d  f       NI= f)zEInstall packages in the venv, but do not record them in the metadata.r   z, r   r   r   r   r   Fr   Nr   r   )r   r   joinr   r^   r8   r[   r"   r*   r$   r   r   )r/   r   re   r   r   r   s         r0   install_unmanaged_packagesVenv.install_unmanaged_packages  s    
 	Odii6M%M]N{=/2D4E4EF D$$%  C )5Z]^b^g^gZhiK G 	/{;!!/		,0G/HJKK "! GFs   >C
Cc                 ,   [        SU< 3U R                  5         U R                  5       nSSS/UQUPnU R                  U5      nS S S 5        [	        WSS9  UR
                  (       a  [        SU< S35      eU R                  5       W-
  n[        U5      S	:X  a*  UR                  5       n[        R                  S
U 35        U$ [        R                  SU 35        [        R                  SU 35        [        SU< S35      e! , (       d  f       N= f)Nzdetermining package name from r   r   z--no-dependenciesF)raise_errorz9
                Cannot determine package name from spec zA.
                Check package spec for errors.
                   zDetermined package name: zold_package_set = zinstall_packages = )r   r^   list_installed_packagesr   r#   r   r   lenr   r   r   )r/   r   re   old_package_setr   r   installed_packagesrE   s           r0   install_package_no_depsVenv.install_package_no_deps8  sC   5n5GH$J[J[\"::<O# 	
 C --,K ] 	ku=!!99G8J K  "99;oM!"a'-113LKK3L>BC  KK,_,=>?KK-.@-ABC99G8J K 5 ]\s   +D
Dpackage_extrasc                     [         R                   " 5       n[        XU R                  U R                  U R                  5      n[
        R                  SS[         R                   " 5       U-
  -  S S35        U$ )Nzget_venv_metadata_for_package: g     @@z.0fms)timer&   rZ   r[   r\   r   r   )r/   rE   r   
data_startvenv_metadatas        r0   get_venv_metadata_for_package"Venv.get_venv_metadata_for_package\  s`    YY[
$\4==RVRbRbdhdqdqr5c499;z;Q6RSV5WWYZ[r3   pinnedc	                    U R                  U[        U5      5      n	[        S0 SU_S[        U5      _SU_SU_SU_SU	R                  _SU	R
                  _SU	R                  _S	U	R                  _S
U	R                  _SU	R                  _SU	R                  _SU	R                  _SU	R                  _SU_SU_6n
U(       a  XR                  l        OXR                  R                  U'   U R                  R!                  5         g )Nru   r   re   r   r   apps	app_pathsapps_of_dependenciesapp_paths_of_dependencies	man_pages	man_pathsman_pages_of_dependenciesman_paths_of_dependenciesr   rv   r   rQ   )r   r   r   r   r   r   r   r   r   r   r   r   r   r]   rt   r~   r   )r/   rE   r   re   r   r   r   rv   r   venv_package_metadatapackage_infos              r0   r   Venv.update_package_metadatab  s6    !% B B<Q[\jQk l" 
 
7G
 
 &	

 "6
 '++
 ,55
 "7!K!K
 '<&U&U
 ,55
 ,55
 '<&U&U
 '<&U&U
 2AA
 
  !
$ .:+AM00>  "r3   c                 r    [        [        U R                  5      S/5      R                  R	                  5       $ )Nz	--version)r"   r8   r[   stdoutstripr9   s    r0   r   Venv.get_python_version  s,    s4#3#34kBCJJPPRRr3   c                     [        [        U R                  5      SSSS/U(       a  S/O/ -   5      n[        R                  " UR
                  R                  5       5      nU Vs1 s H  oDS   iM	     sn$ s  snf )Nr   r   listz--format=jsonz--not-requiredrp   )r"   r8   r[   jsonloadsr   r   )r/   not_requiredcmd_runpip_listxs        r0   r   Venv.list_installed_packages  sk     !!"D%IcoN^M_uwx
 ::gnn2245#+,8a&	8,,,s   #A4appc                    U R                   R                  5       (       d  g [        R                  " U R                  [        [        U R                   5      5      /S9nU H  nUR                   Hn  nUR                  S:X  d  M  UR                  U:X  a  Us  s  $ [        U5      R                  5       (       d  MK  UR                  S   UR                  :X  d  Mj  Us  s  $    M     g )Nrp   rW   zpipx.runName)r[   r_   r   discoverr   r8   r   entry_pointsgrouprp   r   metadata)r/   r   distsdisteps        r0   _find_entry_pointVenv._find_entry_point  s    &&((%%4+A+AM^_c_o_oMpIqHrsD''88z)ww#~!	 Cy''))dmmF.Crww.N!	 (  r3   filenameapp_argsc           	         U R                  U5      nUc%  [        [        U R                  U-  5      /U-   5        [        R                  UR                  5      nUc   S5       e[        R                  S5        UR                  SS5      u  pgSU SUR                  < SU SU S	3	n[        [        U R                  5      S
U/U-   5        g )Nzinvalid entry pointz+Using discovered entry point for 'pipx run'moduleattrzimport sys, z
sys.argv[0] = z

sys.exit(r   z())
z-c)r  r   r8   rZ   _entry_point_value_patternmatchvaluer   r   r   rp   r[   )	r/   r   r  r  entry_pointr  r
  r  codes	            r0   run_appVenv.run_app  s    ,,S1 c$--(234x?@
 +001B1BC 7"77 AB{{8V4fX%5k6F6F5IU[T\\]^b]cchi#d&&'t4x?@r3   c                 b    U R                  U5      b  gU R                  U-  R                  5       $ )NT)r  rZ   is_file)r/   r   r  s      r0   has_appVenv.has_app  s.    !!#&2(1133r3   c                     [        [        [        R                  " U[	        [        U R                  5      5      /S95      5      $ )Nr   )r`   r   r   r   r8   r   r[   rH   s     r0   has_packageVenv.has_package  s4    D..LL]^b^n^nLoHpGqrsttr3   c                     [         R                  S[        X5      =n5        [        SU 3U R                  5         U R                  SS/U-   SU/-   5      nS S S 5        [        W5        g ! , (       d  f       N= f)NUpgrading %s
upgrading r   r   	--upgrade)r   r   r   r   r^   r   r#   )r/   rE   re   r   r   s        r0   r    Venv.upgrade_package_no_metadata  sn    N5Ml5i$iMjz-143D3DE--y(AH(LP[]iOj(jkK Fk* FEs   A++
A9c           
      "   [         R                  S[        X5      =n5        [        SU 3U R                  5         U R                  SS/U-   SU/-   5      n	S S S 5        [        W	5        U R                  UUUUUUUS9  g ! , (       d  f       N/= f)Nr  r  r   r   r  r   )r   r   r   r   r^   r   r#   r   )
r/   rE   r   re   r   r   r   rv   r   r   s
             r0   upgrade_packageVenv.upgrade_package  s     	N5Ml5k$kMlz-143D3DE--y(AH(LP[]kOl(lmK Fk*$$%)!5%+ 	% 	
	 FEs   B  
Br   zCompletedProcess[str]c                     [        U R                  5      SS/U-   nU R                  (       d  UR                  S5        [	        U[        U R
                  5      S9$ )Nr   r   -qr   )r8   r[   rU   r   r"   r*   )r/   r   s     r0   r   Venv._run_pip  sF    4##$dE2S8||JJtc3tyy>::r3   c                 ,   [        U R                  5      SS/U-   nU R                  (       d  UR                  S5        [	        USSS9R
                  nU(       a1  SR                  S U 5       5      n[        R                  U< S35        [        U5      $ )	Nr   r   r#  F)capture_stdoutcapture_stderr c              3   8   #    U  H  n[        U5      v   M     g 7fr,   )r8   ).0cs     r0   	<genexpr>-Venv.run_pip_get_exit_code.<locals>.<genexpr>  s     3s!s1vvss   z failed)
r8   r[   rU   r   r"   r   r   r   errorr   )r/   r   r   cmd_strs       r0   run_pip_get_exit_codeVenv.run_pip_get_exit_code  sz    4##$dE2S8||JJt#CeT__
hh3s33GLLG;g./
##r3   )	rb   rZ   r^   r\   r]   rV   r[   r*   rU   )F)r4   N) )r2  F).rK   rL   rM   rN   rO   r   r   r`   r8   r1   r   rq   propertyrp   rk   r   r   r   r   r   r   r   r   r   r   r   r   r
   r%   r   r   r   r   r	   r   r  r   r  r  r  r   r   r   r   r0  rP   rQ   r3   r0   rS   rS   S   s   T6;> 
#T 
#t 
#S 
#^b 
# c [_ : c   $   $sK'7"8   ;3 ; ;MT#Y M$s) MVZ Mgk M@" ">DI >$ >' 'D ', 66 6 s)	6
 #6 6 6 6 
6pLtCy LDQTI LZ^ L2"c "T#Y "SV "H# sSVx \h  #### ## s)	##
 ### ## ## ## ## 
##JSC S-SX -S Xj-A A3 A# Ac Ax A"43 4# 4$ 4
u u u+ +tCy +UY + 

 
 s)	

 #
 
 
 
 

2;DI ;*A ;$c $x $r3   rS   )Ar   loggingrer   r   pathlibr   typingr   r   r   r   r   r	   r
   
subprocessr   importlib.metadatar   r   ImportErrorimportlib_metadatapackaging.utilsr   pipx.animater   pipx.constantsr   r   pipx.emojisr   pipx.interpreterr   pipx.package_specifierr   r   r   r   pipx.pipx_metadata_filer   r   pipx.shared_libsr   	pipx.utilr   r   r   r   r   r    r!   r"   r#   r$   pipx.venv_inspectr%   r&   	getLoggerrK   r   compileVERBOSEr  r(   rS   rQ   r3   r0   <module>rI     s      	    P P P+<; .   4  +  > (   9			8	$ZZ
 JJ D D4S$ S$K  <;;<s   C! !C21C2