mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-01 05:07:49 +09:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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())
 |