@@ -290,6 +290,8 @@ def run_pipx_command(args: argparse.Namespace, subparsers: Dict[str, argparse.Ar
290290 venv_args ,
291291 verbose ,
292292 force = args .force ,
293+ upgrade = args .upgrade ,
294+ upgrade_strategy = args .upgrade_strategy ,
293295 reinstall = False ,
294296 include_dependencies = args .include_deps ,
295297 preinstall_packages = args .preinstall ,
@@ -318,6 +320,8 @@ def run_pipx_command(args: argparse.Namespace, subparsers: Dict[str, argparse.Ar
318320 include_apps = args .include_apps ,
319321 include_dependencies = args .include_deps ,
320322 force = args .force ,
323+ upgrade = args .upgrade ,
324+ upgrade_strategy = args .upgrade_strategy ,
321325 suffix = args .with_suffix ,
322326 )
323327 elif args .command == "uninject" :
@@ -340,6 +344,7 @@ def run_pipx_command(args: argparse.Namespace, subparsers: Dict[str, argparse.Ar
340344 force = args .force ,
341345 install = args .install ,
342346 python_flag_passed = python_flag_passed ,
347+ upgrade_strategy = args .upgrade_strategy ,
343348 )
344349 elif args .command == "upgrade-all" :
345350 return commands .upgrade_all (
@@ -350,6 +355,7 @@ def run_pipx_command(args: argparse.Namespace, subparsers: Dict[str, argparse.Ar
350355 force = args .force ,
351356 pip_args = pip_args ,
352357 python_flag_passed = python_flag_passed ,
358+ upgrade_strategy = args .upgrade_strategy ,
353359 )
354360 elif args .command == "upgrade-shared" :
355361 return commands .upgrade_shared (
@@ -501,6 +507,22 @@ def _add_install(subparsers: argparse._SubParsersAction, shared_parser: argparse
501507 "installing the main package. Use this flag multiple times if you want to preinstall multiple packages."
502508 ),
503509 )
510+ p .add_argument (
511+ "--upgrade" ,
512+ action = "store_true" ,
513+ help = "Upgrade packages if already installed with `pip install --upgrade`" ,
514+ )
515+ p .add_argument (
516+ "--upgrade-strategy" ,
517+ nargs = 1 ,
518+ choices = ["eager" , "only-if-needed" ],
519+ help = (
520+ "Determines how dependency upgrading is handled. "
521+ '"eager" upgrades all dependencies regardless of whether version requirements are satisfied by the main package. '
522+ '"only-if-needed" upgrades dependencies only when they do not satisfy requirements. '
523+ 'Default "only-if-needed" if --upgrade is provided. Ignored if --upgrade is not specified.'
524+ ),
525+ )
504526 add_pip_venv_args (p )
505527
506528
@@ -569,6 +591,22 @@ def _add_inject(subparsers, venv_completer: VenvCompleter, shared_parser: argpar
569591 action = "store_true" ,
570592 help = "Modify existing virtual environment and files in PIPX_BIN_DIR and PIPX_MAN_DIR" ,
571593 )
594+ p .add_argument (
595+ "--upgrade" ,
596+ action = "store_true" ,
597+ help = "Upgrade packages if already installed with `pip install --upgrade`" ,
598+ )
599+ p .add_argument (
600+ "--upgrade-strategy" ,
601+ nargs = 1 ,
602+ choices = ["eager" , "only-if-needed" ],
603+ help = (
604+ "Determines how dependency upgrading is handled. "
605+ '"eager" upgrades all dependencies regardless of whether version requirements are satisfied by the main package. '
606+ '"only-if-needed" upgrades dependencies only when they do not satisfy requirements. '
607+ 'Default "only-if-needed" if --upgrade is provided. Ignored if --upgrade is not specified.'
608+ ),
609+ )
572610 p .add_argument (
573611 "--with-suffix" ,
574612 action = "store_true" ,
@@ -658,6 +696,17 @@ def _add_upgrade(subparsers, venv_completer: VenvCompleter, shared_parser: argpa
658696 action = "store_true" ,
659697 help = "Install package spec if missing" ,
660698 )
699+ p .add_argument (
700+ "--upgrade-strategy" ,
701+ nargs = 1 ,
702+ choices = ["eager" , "only-if-needed" ],
703+ help = (
704+ "Determines how dependency upgrading is handled. "
705+ '"eager" upgrades all dependencies regardless of whether version requirements are satisfied by the main package. '
706+ '"only-if-needed" upgrades dependencies only when they do not satisfy requirements. '
707+ 'Default "only-if-needed" if --upgrade is provided. Ignored if --upgrade is not specified.'
708+ ),
709+ )
661710 add_python_options (p )
662711
663712
@@ -680,6 +729,17 @@ def _add_upgrade_all(subparsers: argparse._SubParsersAction, shared_parser: argp
680729 action = "store_true" ,
681730 help = "Modify existing virtual environment and files in PIPX_BIN_DIR and PIPX_MAN_DIR" ,
682731 )
732+ p .add_argument (
733+ "--upgrade-strategy" ,
734+ nargs = 1 ,
735+ choices = ["eager" , "only-if-needed" ],
736+ help = (
737+ "Determines how dependency upgrading is handled. "
738+ '"eager" upgrades all dependencies regardless of whether version requirements are satisfied by the main package. '
739+ '"only-if-needed" upgrades dependencies only when they do not satisfy requirements. '
740+ 'Default "only-if-needed" if --upgrade is provided. Ignored if --upgrade is not specified.'
741+ ),
742+ )
683743
684744
685745def _add_upgrade_shared (subparsers : argparse ._SubParsersAction , shared_parser : argparse .ArgumentParser ) -> None :
0 commit comments