
    wBfU                        d Z ddlZddlmZ ddlmZmZmZmZ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mZ ddl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#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZD ddlEmFZF ddlGmHZHmIZImJZJmKZK ddlLmMZM ddlNmOZO ddlmPZP ddlPmQZQ ddlRmSZS  eeT      ZU ed      ZVd&dZWd'd ZXd! ZYd&d"ZZd(d#Z[d)d$Z\d&d%Z]y)*zConda package installation logic.

Core logic for `conda [create|install|update|remove]` commands.

See conda.cli.main_create, conda.cli.main_install, conda.cli.main_update, and
conda.cli.main_remove for the entry points into this module.
    N)	getLogger)abspathbasenameexistsisdirisfilejoin)Path)
IndexedSet   )
CondaError)dals)REPODATA_FNROOT_ENV_NAMEDepsModifierUpdateModifier)contextlocate_prefix_by_name)NULL)Spinner)is_package_filepaths_equal)_supplement_index_with_prefixcalculate_channel_urls	get_index)PrefixSetupUnlinkLinkTransaction)
PrefixData)diff_for_unlink_link_precs)CondaExitZeroCondaImportErrorCondaIndexErrorCondaOSErrorCondaSystemExitCondaValueError"DirectoryNotACondaEnvironmentErrorDirectoryNotFoundError
DryRunExitEnvironmentLocationNotFoundNoBaseEnvironmentErrorOperationNotAllowedPackageNotInstalledErrorPackagesNotFoundErrorResolvePackageNotFoundSpecsConfigurationConflictErrorTooManyArgumentsErrorUnsatisfiableError)mkdir_p)delete_trashpath_is_clean)History)_get_best_prec_match	clone_envexplicittouch_nonadmin)	MatchSpec)PrefixGraph   )common)check_non_admin)set_keyszconda.stderrc                 v   t         j                  | v rt        dt         j                   d      t        |       }d }|t        k(  rd|z  }t        |       r8t        |       r(dt        d t        j                  |       D              vry d| z  }|rt        ||      d| v rt        j                  d|  d	       y y )
Nz(Cannot create a conda environment with 'z' in the prefix. Aborting.z#'%s' is a reserved environment name
conda-metac              3   4   K   | ]  }|j                     y wN)name).0entrys     1lib/python3.12/site-packages/conda/cli/install.py	<genexpr>zcheck_prefix.<locals>.<genexpr>M   s      7
 EJJ7
s   zprefix already exists: %s zCWARNING: A space was detected in your requested environment path:
'z'
Spaces in paths can sometimes be problematic. To minimize issues,
make sure you activate your environment before running any executables!
)ospathsepr%   r   r   r   r   tuplescandir	stderrlogwarning)prefixjsonrD   errors       rG   check_prefixrS   C   s    	zzV6rzzlB\]
 	
 FDE}5<f~=\ 7
$&JJv$67
 2
 
 +f4eT**
f}x XX	
     c                 .   t         j                  | v r!t        |       }t        |      st	        |       t        |       }|st        d|z         t        d|z         t        ||| ||      \  }}|r#t        j                  |t        |      ||       y y )NzSource:      %szDestination: %s)verbosequiet
index_args)actionsuntracked_files
src_prefix
dst_prefix)rJ   sepr   r   r'   r   printr7   r=   stdout_json_successlist)src_argr\   rQ   rW   rX   r[   rY   rZ   s           rG   clonerb   _   s    	vvW%
Z (11*73
*,-*,-(JD* G_ "" 1!!		
 rT   c                     t         j                  s6t         j                  s%d| v rd|  d} t        d|  d      }t	        |       y y y )NrI   "z`
        #
        # To activate this environment, use
        #
        #     $ conda activate zq
        #
        # To deactivate an active environment, use
        #
        #     $ conda deactivate
        )r   rW   rQ   r   r^   )env_name_or_prefixmessages     rG   print_activaterg   x   sZ    ==$$#$%7$8!:  !33 4			
 	g ".=rT   c                 R    	 t        |       S # t        $ r t        d| z  |      w xY w)Nz#expected revision number, not: '%s')int
ValueErrorr%   )argrQ   s     rG   get_revisionrl      s5    Q3x QCcI4PPQs   
 &c                    t        j                          t                t         j                  rd| _        t        |dk(        }t        |dk(        }t        |dk(        }t        |dk(        }t         j                  }t         j                  r|t         j                  k(  rt        d      |rD| j                  s8| j                  s,t         j                  t        j                  k(  st        d      |rt        |t         j                          t         j"                  t        j$                         k7  rt        j&                         }|j)                  d	i       j)                  d
      t         j"                  k(  rn|j)                  di       j)                  d
      t         j"                  k(  rnt+        t         j,                  t         j                        s|t/        d |j1                         D        d      }	|	j)                  d
      t         j"                  k(  r9t3        dt         j,                   dt         j"                   d      }
t5        |
      t6        j9                  dt         j"                         nt;        |      r\t=        |       t?        tA        |dd            s:t+        |t         jB                        r
tE               tG        |      s1tI        |      n%tK        | dd      r	 tM        |       ntS        |      | j                  D cg c]  }|jU                  d       }}|rl| jV                  s`|D cg c]  }tY        |      jZ                   }}t         j\                  D ]+  }tY        |      jZ                  |vs|j_                  |       - | j`                  t         jb                  | jd                  | jf                   | jh                  d}tk        d |D              }|r7|tm        |      k(  rto        ||t         jp                          yt        d      g }| j                  ri| j                  D ]7  }	 |js                  tu        jv                  |t         j                                9 d|v rto        ||t         jp                   |       y|js                  tu        j|                  |t         j                                |r2| j~                  r&t        | j~                  t         j                          n|r| j                  s|st        d       |rt         j                  t        j                  k7  rit        |      }|D ]Y  }tY        |      }|j                  st{        d!|z        |j)                  |jZ                  d      rEt        ||jZ                         |r| j                  r| j                  r4t        d"tm        | j                        t        | j                        d#      t        | j                  |t         j                   t         jp                  |$       t        |       t        | jZ                  xs |       y| j                  }|st        t         j                        }t        |vr|j_                  t               t        | d%      xr | j                  t        k7  }| xs, | j                  t        j                  t        j                  fvxr | }|D ]  }	 |r| j~                  rt        d&| d't         j                   xr t         jp                   t         j                         5  t        |d(   |d)   d|d*   |d+   |d,   ||-      }ddd       t        | j~                        }t        d.| t         j                   xr t         jp                   t         j                         5  t        ||      }ddd       nt         j                  j                         } ||t         jb                  t         j                  ||| j                  /      }t         j                  } |s|r#| j                  t        k(  rt        j                  } t         j                  }!|r"t         j                  xs t        j                  }!|j                  |!| t         j                  xs t         j                  |xs ||d0   k7  1      } n t        || |       y# tN        $ r}tQ        d|z  |      d}~ww xY wc c}w c c}w # tx        $ r t{        d      w xY w# 1 sw Y   xY w# 1 sw Y   kxY w# t        t        f$ rk}tK        |d2d3      s|||d0   k(  rIt        |t              r|t        t        |d(   |d)   d|d*   4            }"t        |j                  |"      Y d}~d}~wt        t        t        f$ r}tK        |d2d3      s|t        | d%      s
||d0   k(  r||r	 j                  !t        j                  t         j                  xs t         j                  ||d0   k7  1      }n# t        t        t        f$ rE}|j                  r%d5|j                  d"   v rt        t        |            ||d0   k(  r|Y d}~nId}~ww xY w||d0   k7  rY d}~|j                  r%d5|j                  d"   v rt        t        |            |Y d}~d}~ww xY w)6z>Logic for `conda install`, `conda update`, and `conda create`.)zrepodata.jsoncreateupdateinstallremovez*cannot use CONDA_FORCE_32BIT=1 in base envzAno package names supplied
# Example: conda update -n myenv scipy
)rQ   cmd_linesubdirenvvarsc              3   n   K   | ]-  \  }}t        t        j                  |j                        r| / y wrC   )r   r   active_prefixparent)rE   pathconfigs      rG   rH   zinstall.<locals>.<genexpr>   s0      (D&&w'<'<dkkJ s   35Nz;
                        Active environment configuration (zJ) is
                        implicitly requesting a non-native platform (z).
                        Please deactivate first or explicitly request the platform via
                        the --platform=[value] command line flag.
                        z5Creating new environment for a non-native platform %srA   historymkdirFzCould not create directory: %s)	caused_byz"')	use_cachechannel_urlsunknownprepend	use_localc              3   2   K   | ]  }t        |        y wrC   )r   )rE   ss     rG   rH   zinstall.<locals>.<genexpr>   s     ;#;s   )rV   z6cannot mix specifications with conda package filenameszcError reading file, file should be a text file containing packages 
conda create --help for detailsz	@EXPLICIT)rV   rX   zCtoo few arguments, must supply command line package specs or --filez@Invalid spec for 'conda update': %s
Use 'conda install' instead.r   z(did not expect any arguments for --clone)rQ   rW   rX   update_modifierzCollecting package metadata ()r~   r   r   r}   r   )r~   r   platformr   r}   r   rP   repodata_fnzReverting to revision )specs_to_addr   command)deps_modifierr   force_reinstallshould_retry_solveallow_retryT)r~   r   r   r   zcould not import)hr   validate_configurationr>   use_only_tar_bz2repodata_fnsbooltarget_prefixforce_32bitroot_prefixr%   filepackagesr   r   
UPDATE_ALLrS   rQ   rs   _native_subdircollect_allgetr   rv   nextitemsr   r+   loginfor   r3   r   r	   conda_prefixr*   r4   r&   getattrr2   OSErrorr#   r)   stripno_default_packagesr:   rD   create_default_packagesappenduse_index_cachechannelsr   override_channelsr   sumlenr8   rW   extendr=   specs_from_urlUnicodeErrorr   specs_from_argsrevisionrl   r   is_name_only_specr,   rb   r0   r`   r9   rg   r   hasattrr   FREEZE_INSTALLEDUPDATE_SPECSr   rV   r   revert_actionsplugin_managerget_cached_solver_backendsubdirscmdr   r   solve_for_transactionr   forcer.   r-   
isinstancerL   r   _formatted_chainsr1   
SystemExitr/   argsr!   str
handle_txn)#r   parserr   newenvisupdate	isinstallisremoverP   context_sourcesactive_env_configmsger   args_packagespkgnamesdefault_packagerX   num_cpspecsfpathprefix_dataspecr   args_set_update_modifier_should_retry_unfrozenr   indexrevision_idxunlink_link_transactionsolver_backendsolverr   r   channels_urlss#                                      rG   rp   rp      s	   ""$ .'X%&FGx'(HW	)*IGx'(H""Fv)<)<<JKK		==""n&?&??
 	
 V',,/>>W3355
 &113O"":r266x@GNNR $$Y377AW^^S !!6!68K8KL$(,;,A,A,C
 %! %((2gnnD ;;B;P;P:Q RFFMnnEU VC .c22HHG 
vVd6<;<67#7#78,..$V,<VDD 	w	&	WFO *&11-1]];QWWU^;M;d..0=>3$$>>&>> 	6O)..e;$$_5	6
 ))((<<---^^J ;];;FS'']F4EF!H  EyyYY 	EV225w||LM	 %UF,=*U	LL''GLLIJT]]T]]6	DIIQ
 	
 G++~/H/HH ( 	BDT?D)) 359:  ??499d3.vtyyAA	B $**=='DMM"T]]#:	  	JJ--!	
 	vtyy*F+$$LG001,&K( 	'(IT-A-AT-I  %$ 	N//1L1LMN *	  $ yx	T]]3K=B'=,=LL 
 &%/%? *9 5!%",["9",["9 *9 5%$/	E  ,DMM:,\N;'=,=LL 
 /=e/+  ")!7!7!Q!Q!S'$$OO!& + HH #*"9"9t/C/Ct/K&4&E&EO ' 5 5$+$9$9$V\=V=VM*0*F*F"/$3$+$;$;$Lw}}.Q+bAQ2Q +G +' myt &f=E  	W?&HTUVV	W
 < ?8    B N   J '(=> 	T1mT2l2.. a!67G$).)3N)C$.y$9%)&0&=	%M 00C0C]SS /" #J0OP ,	1mT2 4!23,r"22G' .4.J.J&3(6(C(C(/(?(?(P7==,7<;K,K	 /K /+ '3   vv"4q	"A.s1v66 #l2&66 7  R 00 660AFF1I=*3q622Y,	s   .c* d?d4d6Ae#d-(Aed:De*	d3ddd*-d7	2e:e	?ek-A f;;k-'k(;A	ik(j;jk(jk(/3k((k-c                    t        |       }|j                         j                         }	 |j                  |      D ch c]  }t	        j
                  |       }}t        ||        t               }t               }|D ]u  t        fd|j                         D              }	|	s|j                         9t        |	      dkD  r|j                  t        |	             b|j                  |	d          w |rt        |      t        t!        |      j"                        }
t%        | |
      \  }}t'        | ||d|d      }t)        |      S c c}w # t        $ r t        d|z        w xY w)Nzno such revision: %dc              3   F   K   | ]  }j                  |      s|  y wrC   )match)rE   precr   s     rG   rH   z!revert_actions.<locals>.<genexpr>  s     JtD9IdJs   !!r<   r    )r5   get_requested_specs_mapvalues	get_stater:   from_dist_str
IndexErrorr"   r   setrL   addr   r6   r-   r   r;   graphr   r   r   )rP   r   r   huser_requested_specsdist_strtarget_statenot_found_in_index_specs
link_precsprecsfinal_precsunlink_precssetupr   s                @rG   r   r     sY   A 446==?A>?kk(>S
2:I##H-
 
 "%0"uJ %Ju||~JJ$((.Z!^NN/67NN58$%  #$<==[4::;K9&+NL*j">RTVWE ''3
  A4x?@@As   E EE E E)c                    | j                   rL|rt        |j                        |s3t        j                  rt        j                  d       y t        d       y t        j                  s%| j                          t        j                          nEt        j                  r5| j                         d   }t        j                  ||d       t               	 | j                          t        j                  rt        d      | j!                          |rpt'        |       t        j(                  t        j*                         k7  r't-        d	t        j(                  ft/        |d
             t1        |j2                  xs |       t        j                  r+| j                         d   }t        j                  ||       y y # t"        $ r}t%        d|      d }~ww xY w)Nz)All requested packages already installed.)rf   z-
# All requested packages already installed.
r   T)rP   rY   dry_runzUPackage caches prepared. UnlinkLinkTransaction cancelled with --download-only option.Exitingrs   z.condarc)rx   )rP   rY   )nothing_to_dor-   package_namesr   rQ   r=   r_   r^   print_transaction_summary
confirm_ynr   _make_legacy_action_groupsr(   download_and_extractdownload_onlyr    executer   r$   r9   rs   r   r?   r
   rg   rD   )r   rP   r   r   	remove_oprY   r   s          rG   r   r     s{   ,,'(:(:;;||**G
  GH<<99;	)DDFqI""&'4Pl
,446  *  	 '')
 v>>W33557>>*&*- 	tyy*F+||)DDFqI""&'B   ,i++,s   ;F= =	GGG)F)FFN)rp   )r   N)^__doc__rJ   loggingr   os.pathr   r   r   r   r   r	   pathlibr
   boltons.setutilsr    r   
auxlib.ishr   base.constantsr   r   r   r   base.contextr   r   common.constantsr   	common.ior   common.pathr   r   
core.indexr   r   r   	core.linkr   r   core.prefix_datar   
core.solver   
exceptionsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   gateways.disk.creater2   gateways.disk.deleter3   r4   rz   r5   miscr6   r7   r8   r9   models.match_specr:   models.prefix_graphr;   r=   r>   main_configr?   __name__r   rN   rS   rb   rg   rl   rp   r   r   r   rT   rG   <module>r     s    
  B B  '   U U 9 #  6 
 ; ) 3    ( + >  L L ) -  # !n%	
8
2&Qu>p	#(L.CrT   