@@ -1946,7 +1946,7 @@ pub struct PipSyncArgs {
19461946 /// environment and only searches for a Python interpreter to use for package resolution.
19471947 /// If a suitable Python interpreter cannot be found, uv will install one.
19481948 /// To disable this, add `--no-python-downloads`.
1949- #[ arg( short = 't' , long, conflicts_with = "prefix" , value_hint = ValueHint :: DirPath ) ]
1949+ #[ arg( short = 't' , long, conflicts_with_all = [ "prefix" , "root" ] , value_hint = ValueHint :: DirPath ) ]
19501950 pub target : Option < PathBuf > ,
19511951
19521952 /// Install packages into `lib`, `bin`, and other top-level folders under the specified
@@ -1961,9 +1961,18 @@ pub struct PipSyncArgs {
19611961 /// environment and only searches for a Python interpreter to use for package resolution.
19621962 /// If a suitable Python interpreter cannot be found, uv will install one.
19631963 /// To disable this, add `--no-python-downloads`.
1964- #[ arg( long, conflicts_with = "target" , value_hint = ValueHint :: DirPath ) ]
1964+ #[ arg( long, conflicts_with_all = [ "target" , "root" ] , value_hint = ValueHint :: DirPath ) ]
19651965 pub prefix : Option < PathBuf > ,
19661966
1967+ /// Install everything relative to this alternate root directory.
1968+ ///
1969+ /// Unlike other install operations, this command does not require discovery of an existing Python
1970+ /// environment and only searches for a Python interpreter to use for package resolution.
1971+ /// If a suitable Python interpreter cannot be found, uv will install one.
1972+ /// To disable this, add `--no-python-downloads`.
1973+ #[ arg( long, conflicts_with_all = [ "target" , "prefix" ] , value_hint = ValueHint :: DirPath ) ]
1974+ pub root : Option < PathBuf > ,
1975+
19671976 /// Don't build source distributions.
19681977 ///
19691978 /// When enabled, resolving will not run arbitrary Python code. The cached wheels of
@@ -2323,7 +2332,7 @@ pub struct PipInstallArgs {
23232332 /// environment and only searches for a Python interpreter to use for package resolution.
23242333 /// If a suitable Python interpreter cannot be found, uv will install one.
23252334 /// To disable this, add `--no-python-downloads`.
2326- #[ arg( short = 't' , long, conflicts_with = "prefix" , value_hint = ValueHint :: DirPath ) ]
2335+ #[ arg( short = 't' , long, conflicts_with_all = [ "prefix" , "root" ] , value_hint = ValueHint :: DirPath ) ]
23272336 pub target : Option < PathBuf > ,
23282337
23292338 /// Install packages into `lib`, `bin`, and other top-level folders under the specified
@@ -2338,9 +2347,18 @@ pub struct PipInstallArgs {
23382347 /// environment and only searches for a Python interpreter to use for package resolution.
23392348 /// If a suitable Python interpreter cannot be found, uv will install one.
23402349 /// To disable this, add `--no-python-downloads`.
2341- #[ arg( long, conflicts_with = "target" , value_hint = ValueHint :: DirPath ) ]
2350+ #[ arg( long, conflicts_with_all = [ "target" , "root" ] , value_hint = ValueHint :: DirPath ) ]
23422351 pub prefix : Option < PathBuf > ,
23432352
2353+ /// Install everything relative to this alternate root directory.
2354+ ///
2355+ /// Unlike other install operations, this command does not require discovery of an existing Python
2356+ /// environment and only searches for a Python interpreter to use for package resolution.
2357+ /// If a suitable Python interpreter cannot be found, uv will install one.
2358+ /// To disable this, add `--no-python-downloads`.
2359+ #[ arg( long, conflicts_with_all = [ "target" , "prefix" ] , value_hint = ValueHint :: DirPath ) ]
2360+ pub root : Option < PathBuf > ,
2361+
23442362 /// Don't build source distributions.
23452363 ///
23462364 /// When enabled, resolving will not run arbitrary Python code. The cached wheels of
@@ -2539,13 +2557,17 @@ pub struct PipUninstallArgs {
25392557 pub no_break_system_packages : bool ,
25402558
25412559 /// Uninstall packages from the specified `--target` directory.
2542- #[ arg( short = 't' , long, conflicts_with = "prefix" , value_hint = ValueHint :: DirPath ) ]
2560+ #[ arg( short = 't' , long, conflicts_with_all = [ "prefix" , "root" ] , value_hint = ValueHint :: DirPath ) ]
25432561 pub target : Option < PathBuf > ,
25442562
25452563 /// Uninstall packages from the specified `--prefix` directory.
2546- #[ arg( long, conflicts_with = "target" , value_hint = ValueHint :: DirPath ) ]
2564+ #[ arg( long, conflicts_with_all = [ "target" , "root" ] , value_hint = ValueHint :: DirPath ) ]
25472565 pub prefix : Option < PathBuf > ,
25482566
2567+ /// Uninstall packages from the specified `--root` directory.
2568+ #[ arg( long, conflicts_with_all = [ "target" , "prefix" ] , value_hint = ValueHint :: DirPath ) ]
2569+ pub root : Option < PathBuf > ,
2570+
25492571 /// Perform a dry run, i.e., don't actually uninstall anything but print the resulting plan.
25502572 #[ arg( long) ]
25512573 pub dry_run : bool ,
@@ -2610,13 +2632,17 @@ pub struct PipFreezeArgs {
26102632 pub no_system : bool ,
26112633
26122634 /// List packages from the specified `--target` directory.
2613- #[ arg( short = 't' , long, conflicts_with_all = [ "prefix" , "paths" ] , value_hint = ValueHint :: DirPath ) ]
2635+ #[ arg( short = 't' , long, conflicts_with_all = [ "prefix" , "root" , " paths"] , value_hint = ValueHint :: DirPath ) ]
26142636 pub target : Option < PathBuf > ,
26152637
26162638 /// List packages from the specified `--prefix` directory.
2617- #[ arg( long, conflicts_with_all = [ "target" , "paths" ] , value_hint = ValueHint :: DirPath ) ]
2639+ #[ arg( long, conflicts_with_all = [ "target" , "root" , " paths"] , value_hint = ValueHint :: DirPath ) ]
26182640 pub prefix : Option < PathBuf > ,
26192641
2642+ /// List packages from the specified `--root` directory.
2643+ #[ arg( long, conflicts_with_all = [ "target" , "prefix" ] , value_hint = ValueHint :: DirPath ) ]
2644+ pub root : Option < PathBuf > ,
2645+
26202646 #[ command( flatten) ]
26212647 pub compat_args : compat:: PipGlobalCompatArgs ,
26222648}
@@ -2694,13 +2720,17 @@ pub struct PipListArgs {
26942720 pub no_system : bool ,
26952721
26962722 /// List packages from the specified `--target` directory.
2697- #[ arg( short = 't' , long, conflicts_with = "prefix" , value_hint = ValueHint :: DirPath ) ]
2723+ #[ arg( short = 't' , long, conflicts_with_all = [ "prefix" , "root" ] , value_hint = ValueHint :: DirPath ) ]
26982724 pub target : Option < PathBuf > ,
26992725
27002726 /// List packages from the specified `--prefix` directory.
2701- #[ arg( long, conflicts_with = "target" , value_hint = ValueHint :: DirPath ) ]
2727+ #[ arg( long, conflicts_with_all = [ "target" , "root" ] , value_hint = ValueHint :: DirPath ) ]
27022728 pub prefix : Option < PathBuf > ,
27032729
2730+ /// List packages from the specified `--root` directory.
2731+ #[ arg( long, conflicts_with_all = [ "target" , "prefix" ] , value_hint = ValueHint :: DirPath ) ]
2732+ pub root : Option < PathBuf > ,
2733+
27042734 #[ command( flatten) ]
27052735 pub compat_args : compat:: PipListCompatArgs ,
27062736}
@@ -2820,13 +2850,17 @@ pub struct PipShowArgs {
28202850 pub no_system : bool ,
28212851
28222852 /// Show a package from the specified `--target` directory.
2823- #[ arg( short = 't' , long, conflicts_with = "prefix" , value_hint = ValueHint :: DirPath ) ]
2853+ #[ arg( short = 't' , long, conflicts_with_all = [ "prefix" , "root" ] , value_hint = ValueHint :: DirPath ) ]
28242854 pub target : Option < PathBuf > ,
28252855
28262856 /// Show a package from the specified `--prefix` directory.
2827- #[ arg( long, conflicts_with = "target" , value_hint = ValueHint :: DirPath ) ]
2857+ #[ arg( long, conflicts_with_all = [ "target" , "root" ] , value_hint = ValueHint :: DirPath ) ]
28282858 pub prefix : Option < PathBuf > ,
28292859
2860+ /// Show a package from the specified `--root` directory.
2861+ #[ arg( long, conflicts_with_all = [ "target" , "prefix" ] , value_hint = ValueHint :: DirPath ) ]
2862+ pub root : Option < PathBuf > ,
2863+
28302864 #[ command( flatten) ]
28312865 pub compat_args : compat:: PipGlobalCompatArgs ,
28322866}
0 commit comments