| | |
| | | # |
| | | |
| | | # |
| | | # Print requirements for a package. |
| | | # Evaluated and normalized. |
| | | # Usage: |
| | | # python-requires PACKAGE [EXTRA] |
| | | # |
| | | # Print requirements for PACKAGE. Evaluated and normalized. |
| | | # If PACKAGE is - evaluate and normalize stdin. |
| | | # With optional EXTRA argument passed print requirements for such extra only. |
| | | # |
| | | |
| | | import sys |
| | | import re |
| | | |
| | | try: |
| | | try: |
| | | from importlib.metadata import requires |
| | | except ImportError: |
| | | from importlib_metadata import requires |
| | | from importlib.metadata import requires |
| | | from packaging.requirements import Requirement |
| | | from packaging.markers import UndefinedEnvironmentName |
| | | import subprocess |
| | | except: |
| | | exit() |
| | | |
| | | if len(sys.argv) < 2: |
| | | exit() |
| | | |
| | | e = {'extra': sys.argv[2]} if len(sys.argv) > 2 else None |
| | | reqs = requires(sys.argv[1]) if sys.argv[1] != "-" else sys.stdin.readlines() |
| | | |
| | | try: |
| | | for req in requires(sys.argv[1]): |
| | | r = Requirement(req) |
| | | for req in reqs: |
| | | try: |
| | | if not r.marker or r.marker.evaluate(): |
| | | print(re.sub(r"[-_.]+", "-", r.name).lower()) |
| | | except UndefinedEnvironmentName: |
| | | pass |
| | | r = Requirement(re.sub(r"#.*", "", req)) |
| | | except: |
| | | continue |
| | | m = r.marker |
| | | if (not m and not e) or (m and m.evaluate(e) and (not e or not m.evaluate())): |
| | | print(re.sub(r"[-_.]+", "-", r.name).lower()) |
| | | for extra in r.extras: |
| | | subprocess.run([sys.argv[0], r.name, extra]) |
| | | except: |
| | | pass |