Source code for requirements.parser

import os
import warnings
from typing import Iterator, TextIO, Union

from .requirement import Requirement


[docs]def parse(reqstr: Union[str, TextIO]) -> Iterator[Requirement]: """ Parse a requirements file into a list of Requirements See: pip/req.py:parse_requirements() :param reqstr: a string or file like object containing requirements :returns: a *generator* of Requirement objects """ filename = getattr(reqstr, 'name', None) # Python 3.x only if not isinstance(reqstr, str): reqstr = reqstr.read() for line in reqstr.splitlines(): line = line.strip() if line == '': continue elif not line or line.startswith('#'): # comments are lines that start with # only continue elif line.startswith('-r') or line.startswith('--requirement'): _, new_filename = line.split() new_file_path = os.path.join(os.path.dirname(filename or '.'), new_filename) with open(new_file_path) as f: for requirement in parse(f): yield requirement elif line.startswith('-f') or line.startswith('--find-links') or \ line.startswith('-i') or line.startswith('--index-url') or \ line.startswith('--extra-index-url') or \ line.startswith('--no-index'): warnings.warn('Private repos not supported. Skipping.') continue elif line.startswith('-Z') or line.startswith('--always-unzip'): warnings.warn('Unused option --always-unzip. Skipping.') continue else: yield Requirement.parse(line)