You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					98 lines
				
				2.9 KiB
			
		
		
			
		
	
	
					98 lines
				
				2.9 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								from optparse import Values
							 | 
						||
| 
								 | 
							
								from typing import List
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from pip._internal.cli import cmdoptions
							 | 
						||
| 
								 | 
							
								from pip._internal.cli.base_command import Command
							 | 
						||
| 
								 | 
							
								from pip._internal.cli.status_codes import SUCCESS
							 | 
						||
| 
								 | 
							
								from pip._internal.operations.freeze import freeze
							 | 
						||
| 
								 | 
							
								from pip._internal.utils.compat import stdlib_pkgs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DEV_PKGS = {"pip", "setuptools", "distribute", "wheel", "pkg-resources"}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FreezeCommand(Command):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Output installed packages in requirements format.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    packages are listed in a case-insensitive sorted order.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    usage = """
							 | 
						||
| 
								 | 
							
								      %prog [options]"""
							 | 
						||
| 
								 | 
							
								    log_streams = ("ext://sys.stderr", "ext://sys.stderr")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def add_options(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.cmd_opts.add_option(
							 | 
						||
| 
								 | 
							
								            "-r",
							 | 
						||
| 
								 | 
							
								            "--requirement",
							 | 
						||
| 
								 | 
							
								            dest="requirements",
							 | 
						||
| 
								 | 
							
								            action="append",
							 | 
						||
| 
								 | 
							
								            default=[],
							 | 
						||
| 
								 | 
							
								            metavar="file",
							 | 
						||
| 
								 | 
							
								            help=(
							 | 
						||
| 
								 | 
							
								                "Use the order in the given requirements file and its "
							 | 
						||
| 
								 | 
							
								                "comments when generating output. This option can be "
							 | 
						||
| 
								 | 
							
								                "used multiple times."
							 | 
						||
| 
								 | 
							
								            ),
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        self.cmd_opts.add_option(
							 | 
						||
| 
								 | 
							
								            "-l",
							 | 
						||
| 
								 | 
							
								            "--local",
							 | 
						||
| 
								 | 
							
								            dest="local",
							 | 
						||
| 
								 | 
							
								            action="store_true",
							 | 
						||
| 
								 | 
							
								            default=False,
							 | 
						||
| 
								 | 
							
								            help=(
							 | 
						||
| 
								 | 
							
								                "If in a virtualenv that has global access, do not output "
							 | 
						||
| 
								 | 
							
								                "globally-installed packages."
							 | 
						||
| 
								 | 
							
								            ),
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        self.cmd_opts.add_option(
							 | 
						||
| 
								 | 
							
								            "--user",
							 | 
						||
| 
								 | 
							
								            dest="user",
							 | 
						||
| 
								 | 
							
								            action="store_true",
							 | 
						||
| 
								 | 
							
								            default=False,
							 | 
						||
| 
								 | 
							
								            help="Only output packages installed in user-site.",
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        self.cmd_opts.add_option(cmdoptions.list_path())
							 | 
						||
| 
								 | 
							
								        self.cmd_opts.add_option(
							 | 
						||
| 
								 | 
							
								            "--all",
							 | 
						||
| 
								 | 
							
								            dest="freeze_all",
							 | 
						||
| 
								 | 
							
								            action="store_true",
							 | 
						||
| 
								 | 
							
								            help=(
							 | 
						||
| 
								 | 
							
								                "Do not skip these packages in the output:"
							 | 
						||
| 
								 | 
							
								                " {}".format(", ".join(DEV_PKGS))
							 | 
						||
| 
								 | 
							
								            ),
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        self.cmd_opts.add_option(
							 | 
						||
| 
								 | 
							
								            "--exclude-editable",
							 | 
						||
| 
								 | 
							
								            dest="exclude_editable",
							 | 
						||
| 
								 | 
							
								            action="store_true",
							 | 
						||
| 
								 | 
							
								            help="Exclude editable package from output.",
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        self.cmd_opts.add_option(cmdoptions.list_exclude())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.parser.insert_option_group(0, self.cmd_opts)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def run(self, options: Values, args: List[str]) -> int:
							 | 
						||
| 
								 | 
							
								        skip = set(stdlib_pkgs)
							 | 
						||
| 
								 | 
							
								        if not options.freeze_all:
							 | 
						||
| 
								 | 
							
								            skip.update(DEV_PKGS)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if options.excludes:
							 | 
						||
| 
								 | 
							
								            skip.update(options.excludes)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        cmdoptions.check_list_path_option(options)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for line in freeze(
							 | 
						||
| 
								 | 
							
								            requirement=options.requirements,
							 | 
						||
| 
								 | 
							
								            local_only=options.local,
							 | 
						||
| 
								 | 
							
								            user_only=options.user,
							 | 
						||
| 
								 | 
							
								            paths=options.path,
							 | 
						||
| 
								 | 
							
								            isolated=options.isolated_mode,
							 | 
						||
| 
								 | 
							
								            skip=skip,
							 | 
						||
| 
								 | 
							
								            exclude_editable=options.exclude_editable,
							 | 
						||
| 
								 | 
							
								        ):
							 | 
						||
| 
								 | 
							
								            sys.stdout.write(line + "\n")
							 | 
						||
| 
								 | 
							
								        return SUCCESS
							 |