mirror of
https://github.com/clearml/clearml-agent
synced 2025-01-31 09:06:52 +00:00
51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
import os
|
|
import warnings
|
|
|
|
from .requirement import Requirement
|
|
|
|
|
|
def parse(reqstr):
|
|
"""
|
|
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)
|
|
try:
|
|
# Python 2.x compatibility
|
|
if not isinstance(reqstr, basestring):
|
|
reqstr = reqstr.read()
|
|
except NameError:
|
|
# 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)
|