Module: PoisePython::Resources::PythonPackage
- Defined in:
- lib/poise_python/resources/python_package.rb
Overview
A python_package resource to manage Python installations using pip.
Defined Under Namespace
Constant Summary collapse
- PIP_HACK_SCRIPT =
A Python snippet to check which versions of things pip would try to install. Probably not 100% bulletproof.
"import json\nimport re\nimport sys\n\nimport pip\n# Don't use pkg_resources because I don't want to require it before this anyway.\nif re.match(r'0\\\\.|1\\\\.|6\\\\.0', pip.__version__):\n sys.stderr.write('The python_package resource requires pip >= 6.1.0, currently '+pip.__version__+'\\\\n')\n sys.exit(1)\n\ntry:\n from pip.commands import InstallCommand\n from pip.index import PackageFinder\n from pip.req import InstallRequirement\nexcept ImportError:\n # Pip 10 moved all internals to their own package.\n from pip._internal.commands import InstallCommand\n from pip._internal.index import PackageFinder\n from pip._internal.req import InstallRequirement\n\npackages = {}\ncmd = InstallCommand()\noptions, args = cmd.parse_args(sys.argv[1:])\nwith cmd._build_session(options) as session:\n if options.no_index:\n index_urls = []\n else:\n index_urls = [options.index_url] + options.extra_index_urls\n finder_options = dict(\n find_links=options.find_links,\n index_urls=index_urls,\n allow_all_prereleases=options.pre,\n process_dependency_links=options.process_dependency_links,\n trusted_hosts=options.trusted_hosts,\n session=session,\n )\n if getattr(options, 'format_control', None):\n finder_options['format_control'] = options.format_control\n finder = PackageFinder(**finder_options)\n find_all = getattr(finder, 'find_all_candidates', getattr(finder, '_find_all_versions', None))\n for arg in args:\n req = InstallRequirement.from_line(arg)\n found = finder.find_requirement(req, True)\n all_candidates = find_all(req.name)\n candidate = [c for c in all_candidates if c.location == found]\n if candidate:\n packages[candidate[0].project.lower()] = str(candidate[0].version)\njson.dump(packages, sys.stdout)\n"