
    $TXg?Z                    B   d Z ddlm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 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?m@Z@ ddlAmBZB ddlCmDZDmEZE ddlFmGZG ddlHmIZImJZJmKZKmLZL ddlMmNZN ddlOmPZP ddlQmRZRmSZS ddlmTZT ddlTmUZU ddlVmWZW  eeX      ZY ed      ZZd)d Z[d*d+d!Z\d*d,d"Z]d-d#Z^d$ Z_d*d%Z`d.d&Zad/d'Zbd*d(Zcy)0zConda 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.
    )annotationsN)	getLogger)abspathbasenameexistsisdirisfilejoin)Path)
IndexedSet   )
CondaError)dals)REPODATA_FNROOT_ENV_NAMEDepsModifierUpdateModifier)contextlocate_prefix_by_name)NULL)is_package_filepaths_equal)_supplement_index_with_prefixcalculate_channel_urls	get_index)PrefixSetupUnlinkLinkTransaction)
PrefixData)diff_for_unlink_link_precs)CondaEnvException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)
confirm_ynget_spinner   )common)check_non_admin)set_keyszconda.stderrc                P    t        |       } | j                         st        d      y)zY
    Validate that we are receiving at least one valid value for --name or --prefix.
    z2The environment you have specified does not exist.N)r   r   r    )prefixs    1lib/python3.12/site-packages/conda/cli/install.pyvalidate_prefix_existsrF   F   s'     &\F==? TUU     c                F   ddl m}m} ddlm} t
        j                  | v r	 ||       } n || |d      } |sjt
        j                  j                  |       rKt
        j                  j                  t
        j                  j                  |             }t        d| d      | S )z*Ensure that the new prefix does not exist.r   )r   validate_prefix_name)expandF)ctx
allow_basezThe environment 'z&' already exists. Override with --yes.)base.contextr   rI   common.pathrJ   osseppathr   r   normpathr    )destforcer   rI   rJ   env_names         rE   validate_new_prefixrV   O   s    <$	vv~d|#Dg%HRWW^^D)77##BGG$4$4T$:;z)OP
 	
 KrG   c                x   t         j                  | v rt        dt         j                   d      t        |       }d }|t        k(  rd| d}t        |       r8t        |       r(dt        d t        j                  |       D              vry d|  }|rt        ||      d| v rt        j                  d	|  d
       y y )Nz(Cannot create a conda environment with 'z' in the prefix. Aborting.'z ' is a reserved environment name
conda-metac              3  4   K   | ]  }|j                     y wN)name).0entrys     rE   	<genexpr>zcheck_prefix.<locals>.<genexpr>l   s      7
$65EJJ$6s   zprefix already exists:  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!
)rO   pathsepr&   r   r   r   r   tuplescandir	stderrlogwarning)rD   jsonr\   errors       rE   check_prefixrh   b   s    	zzV6rzzlB\]
 	
 FDE}D69:f~=\ 7
$&JJv$67
 2
 
 )&2eT**
f}x XX	
 rG   c                .   t         j                  | v r!t        |       }t        |      st	        |       t        |       }|st        d|        t        d|        t        ||| ||      \  }}|r#t        j                  |t        |      ||       y y )NzSource:      zDestination: )verbosequiet
index_args)actionsuntracked_files
src_prefix
dst_prefix)rO   rP   r   r   r(   r   printr8   r@   stdout_json_successlist)src_argrp   rf   rk   rl   ro   rm   rn   s           rE   cloneru   ~   s    	vvW%
Z (11*73
j\*+j\*+(JD* G_ "" 1!!		
 rG   c                    t         j                  s6t         j                  s%d| v rd|  d} t        d|  d      }t	        |       y y y )Nr`   "z`
        #
        # To activate this environment, use
        #
        #     $ conda activate zq
        #
        # To deactivate an active environment, use
        #
        #     $ conda deactivate
        )r   rk   rf   r   rq   )env_name_or_prefixmessages     rE   print_activaterz      sZ    ==$$#$%7$8!:  !33 4			
 	g ".=rG   c                T    	 t        |       S # t        $ r t        d|  d|      w xY w)Nz expected revision number, not: 'rX   )int
ValueErrorr&   )argrf   s     rE   get_revisionr      s9    O3x O @QGNNO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_                  |       - t         j`                  }|| jb                   | jd                  d}tg        d |D              }|r]|ti        |      k(  rDtk        ||t         jl                          |r$to        |       tq        | jZ                  xs |       yt        d      g }| j                  r| j                  D ]7  }	 |js                  tu        jv                  |t         j                                9 d|v rDtk        ||t         jl                          |r$to        |       tq        | jZ                  xs |       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  rjt        |      }|D ]Z  }tY        |      }|j                  st{        d | d!      |j)                  |jZ                  d      rFt        ||jZ                         |r| j                  r| j                  r4t        d"ti        | j                        t        | j                        d#      t        | j                  |t         j                   t         jl                  |$       to        |       tq        | 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 ]l  }	 |rx| j~                  rlt        d&| d'      5  t        |d(   |d)   d|d*   ||+      }ddd       t        | j~                        }t        d,|       5  t        ||      }ddd       nt         j                  j                         } |||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 ||d.   k7  /      } n t        || |       y# tN        $ r}tQ        d| |      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        |d0d1      s|||d.   k(  rIt        |t              r|t        t        |d(   |d)   d|d*   2            }#t        |j                  |#      Y d}~Pd}~wt        t        t        f$ r}tK        |d0d1      s|t        | d%      s
||d.   k(  r||r	  j                  "t        j                  t         j                  xs t         j                  ||d.   k7  /      }n# t        t        t        f$ rE}|j                  r%d3|j                  d"   v rt        t        |            ||d.   k(  r|Y d}~nId}~ww xY w||d.   k7  rY d}~D|j                  r%d3|j                  d"   v rt        t        |            |Y d}~}d}~ww xY w)4z>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
)rf   cmd_linesubdirenvvarsc              3  n   K   | ]-  \  }}t        t        j                  |j                        r| / y wr[   )r   r   active_prefixparent)r]   rQ   configs      rE   r_   zinstall.<locals>.<genexpr>   s0      ,CLD&&w'<'<dkkJ ,Cs   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 %srY   historymkdirFzCould not create directory: )	caused_byz"')channel_urlsprepend	use_localc              3  2   K   | ]  }t        |        y wr[   )r   )r]   ss     rE   r_   zinstall.<locals>.<genexpr>  s     ;]#]s   )rj   z6cannot mix specifications with conda package filenameszcError reading file, file should be a text file containing packages 
conda create --help for detailsz	@EXPLICITzCtoo few arguments, must supply command line package specs or --filez!Invalid spec for 'conda update': z
Use 'conda install' instead.r   z(did not expect any arguments for --clone)rf   rk   rl   update_modifierzCollecting package metadata ()r   r   r   )r   r   platformr   rD   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)er   validate_configurationrA   use_only_tar_bz2repodata_fnsbooltarget_prefixforce_32bitroot_prefixr&   filepackagesr   r   
UPDATE_ALLrh   rf   r   _native_subdircollect_allgetr   r   nextitemsr   r,   loginfor   r4   r	   r
   conda_prefixr+   r5   r'   getattrr3   OSErrorr$   r*   stripno_default_packagesr;   r\   create_default_packagesappendchannelsoverride_channelsr   sumlenr9   rk   r:   rz   extendr@   specs_from_urlUnicodeErrorr   specs_from_argsrevisionr   r   is_name_only_specr-   ru   r1   rs   r   hasattrr   FREEZE_INSTALLEDUPDATE_SPECSr>   r   revert_actionsplugin_managerget_cached_solver_backendsubdirscmdr   r   solve_for_transactionr   rT   r/   r.   
isinstancerb   r   _formatted_chainsr2   
SystemExitr0   argsr"   str
handle_txn)$r   parserr   newenvisupdate	isinstallisremoverD   context_sourcesactive_env_configmsger   args_packagespkgnamesdefault_packagecontext_channelsrl   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$                                       rE   r   r      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	&	UFO *&11-1]];]QWWU^]M;d..0=>3$$>&>>O)..e;$$_5  ? '' ) ---^^J ;];;FS'']F4EFv&tyy2F3!H  EyyYYEV225w||LM  %UF,=>v&tyy2F3	LL''GLLIJT]]T]]6	DIIQ
 	
 G++~/H/HH (DT?D)) 7v >3 3  ??499d3.vtyyAA  $**=='DMM"T]]#:	  	JJ--!	
 	vtyy*F+$$LG001,&K( 	'(IT-A-AT-I  %$ 	N//1L1LMN *	  $p	T]] #@Q!OP%%/%? *9 5!%",["9  &$/	E Q  ,DMM: #9,!HI.<e/+ JI
 ")!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 +' ] $d &f=G  	U!=fXFRSTT	U
 < ?D    B T QP JIB '(=> 	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   .b( c	?c4c.dc+&+dc8C7d(	c1ccc(+c5	0d8d	=dj+A e99j+'j&9A	hj&i;ij&ij&-3j&&j+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r[   )match)r]   precr   s     rE   r_   z!revert_actions.<locals>.<genexpr>  s     J~tD9Id~s   !!r?   r    )r6   get_requested_specs_mapvalues	get_stater;   from_dist_str
IndexErrorr#   r   setrb   addr   r7   r.   r   r<   graphr   r   r   )rD   r   r   huser_requested_specsdist_strtarget_statenot_found_in_index_specs
link_precsprecsfinal_precsunlink_precssetupr   s                @rE   r   r     sW   A 446==?A>?kk(>S
>S(I##H->S 	 
 "%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                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.)ry   z-
# All requested packages already installed.
r   T)rD   rm   dry_runzUPackage caches prepared. UnlinkLinkTransaction cancelled with --download-only option.Exitingr   z.condarc)rQ   )rD   rm   )nothing_to_dor.   package_namesr   rf   r@   rr   rq   print_transaction_summaryr=   r  _make_legacy_action_groupsr)   download_and_extractdownload_onlyr!   executer   r%   r:   r   r   rB   r   rz   r\   )r   rD   r   r   	remove_oprm   r   s          rE   r   r     st   ,,'(:(:;;||**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   
;F3 3	G<GG)rD   z
str | PathreturnNone)F)rS   r   rT   r   r  r   )rD   r   )FFN)r   )r   N)d__doc__
__future__r   rO   loggingr   os.pathr   r   r   r   r	   r
   pathlibr   boltons.setutilsr    r   
auxlib.ishr   base.constantsr   r   r   r   rM   r   r   common.constantsr   rN   r   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   r2   gateways.disk.creater3   gateways.disk.deleter4   r5   r   r6   miscr7   r8   r9   r:   models.match_specr;   models.prefix_graphr<   	reportersr=   r>   r@   rA   main_configrB   __name__r   rd   rF   rV   rh   ru   rz   r   r   r   r   r   rG   rE   <module>r&     s    # 	  B B  '   U U 9 # 6 
 ; ) 3     * + >  L L ) - /  # !n%	V&
8
2&Ov>r	#(L.CrG   