aboutsummaryrefslogtreecommitdiff
path: root/devscripts/install_deps.py
diff options
context:
space:
mode:
authorbashonly <bashonly@protonmail.com>2024-02-11 15:17:08 +0100
committerSimon Sawicki <contact@grub4k.xyz>2024-02-11 19:09:03 +0100
commitb8a433aaca86b15cb9f1a451b0f69371d2fc22a9 (patch)
tree5490206b51234d285aee170198a482cd463bb19f /devscripts/install_deps.py
parentfd647775e27e030ab17387c249e2ebeba68f8ff0 (diff)
[devscripts] `install_deps`: Add script and migrate to it
Authored by: bashonly
Diffstat (limited to 'devscripts/install_deps.py')
-rwxr-xr-xdevscripts/install_deps.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/devscripts/install_deps.py b/devscripts/install_deps.py
new file mode 100755
index 000000000..715e5b044
--- /dev/null
+++ b/devscripts/install_deps.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python3
+
+# Allow execution from anywhere
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+import argparse
+import re
+import subprocess
+
+from devscripts.tomlparse import parse_toml
+from devscripts.utils import read_file
+
+
+def parse_args():
+ parser = argparse.ArgumentParser(description='Install dependencies for yt-dlp')
+ parser.add_argument(
+ 'input', nargs='?', metavar='TOMLFILE', default='pyproject.toml', help='Input file (default: %(default)s)')
+ parser.add_argument(
+ '-e', '--exclude', metavar='REQUIREMENT', action='append', help='Exclude a required dependency')
+ parser.add_argument(
+ '-i', '--include', metavar='GROUP', action='append', help='Include an optional dependency group')
+ parser.add_argument(
+ '-o', '--only-optional', action='store_true', help='Only install optional dependencies')
+ parser.add_argument(
+ '-p', '--print', action='store_true', help='Only print a requirements.txt to stdout')
+ parser.add_argument(
+ '-u', '--user', action='store_true', help='Install with pip as --user')
+ return parser.parse_args()
+
+
+def main():
+ args = parse_args()
+ toml_data = parse_toml(read_file(args.input))
+ deps = toml_data['project']['dependencies']
+ targets = deps.copy() if not args.only_optional else []
+
+ for exclude in args.exclude or []:
+ for dep in deps:
+ simplified_dep = re.match(r'[\w-]+', dep)[0]
+ if dep in targets and (exclude.lower() == simplified_dep.lower() or exclude == dep):
+ targets.remove(dep)
+
+ optional_deps = toml_data['project']['optional-dependencies']
+ for include in args.include or []:
+ group = optional_deps.get(include)
+ if group:
+ targets.extend(group)
+
+ if args.print:
+ for target in targets:
+ print(target)
+ return
+
+ pip_args = [sys.executable, '-m', 'pip', 'install', '-U']
+ if args.user:
+ pip_args.append('--user')
+ pip_args.extend(targets)
+
+ return subprocess.call(pip_args)
+
+
+if __name__ == '__main__':
+ sys.exit(main())