Created
April 28, 2018 11:38
-
-
Save kaos/68511bd013fcdebe766c981f50b473d4 to your computer and use it in GitHub Desktop.
pip list available package versions
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 characters
#!/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()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment