Created
April 28, 2018 11:38
-
-
Save kaos/68511bd013fcdebe766c981f50b473d4 to your computer and use it in GitHub Desktop.
Revisions
-
kaos created this gist
Apr 28, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,84 @@ #!/usr/bin/env python # When you want a easy way to get at all (or the latest) version of a certain python package from a PyPi index. import sys import logging try: from pip._internal import cmdoptions, main from pip._internal.commands import commands_dict from pip._internal.basecommand import RequirementCommand except ImportError: from pip import cmdoptions, main from pip.commands import commands_dict from pip.basecommand import RequirementCommand from pip._vendor.packaging.version import parse as parse_version logger = logging.getLogger('pip') class ListPkgVersionsCommand(RequirementCommand): """ List all available versions for a given package from: - PyPI (and other indexes) using requirement specifiers. - VCS project urls. - Local project directories. - Local or remote source archives. """ name = "list-pkg-versions" usage = """ %prog [options] <requirement specifier> [package-index-options] ... %prog [options] [-e] <vcs project url> ... %prog [options] [-e] <local project path> ... %prog [options] <archive url/path> ...""" summary = 'List package versions.' def __init__(self, *args, **kw): super(ListPkgVersionsCommand, self).__init__(*args, **kw) cmd_opts = self.cmd_opts cmd_opts.add_option(cmdoptions.install_options()) cmd_opts.add_option(cmdoptions.global_options()) cmd_opts.add_option(cmdoptions.use_wheel()) cmd_opts.add_option(cmdoptions.no_use_wheel()) cmd_opts.add_option(cmdoptions.no_binary()) cmd_opts.add_option(cmdoptions.only_binary()) cmd_opts.add_option(cmdoptions.pre()) cmd_opts.add_option(cmdoptions.require_hashes()) index_opts = cmdoptions.make_option_group( cmdoptions.index_group, self.parser, ) self.parser.insert_option_group(0, index_opts) self.parser.insert_option_group(0, cmd_opts) def run(self, options, args): cmdoptions.resolve_wheel_no_use_binary(options) cmdoptions.check_install_build_global(options) with self._build_session(options) as session: finder = self._build_package_finder(options, session) # do what you please with the finder object here... ;) for pkg in args: logger.info( '%s: %s', pkg, ', '.join( sorted( set(str(c.version) for c in finder.find_all_candidates(pkg)), key=parse_version, ) ) ) commands_dict[ListPkgVersionsCommand.name] = ListPkgVersionsCommand if __name__ == '__main__': sys.exit(main())