Add requirements file support in Task.add_requirements (#575)

This commit is contained in:
eugen-ajechiloae-clearml 2022-02-17 00:04:55 +02:00 committed by GitHub
parent a8fbe51231
commit 5e43a74c7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1841,14 +1841,27 @@ class Task(IdObjectBase, AccessMixin, SetupUploadMixin):
Example: Task.add_requirements('tensorflow', '>=2.4') Example: Task.add_requirements('tensorflow', '>=2.4')
Example: Task.add_requirements('tensorflow') -> use the installed tensorflow version Example: Task.add_requirements('tensorflow') -> use the installed tensorflow version
Example: Task.add_requirements('tensorflow', '') -> no version limit Example: Task.add_requirements('tensorflow', '') -> no version limit
Alternatively, you can add all requirements from a file.
Example: Task.add_requirements('/path/to/your/project/requirements.txt')
:param str package_name: The package name to add to the "Installed Packages" section of the task. :param str package_name: The package name or path to a requirements file
to add to the "Installed Packages" section of the task.
:param package_version: The package version requirements. If ``None``, then use the installed version. :param package_version: The package version requirements. If ``None``, then use the installed version.
""" """
if not running_remotely() and hasattr(cls, 'current_task') and cls.current_task(): if not running_remotely() and hasattr(cls, "current_task") and cls.current_task():
get_logger('task').warning( get_logger("task").warning("Requirement ignored, Task.add_requirements() must be called before Task.init()")
'Requirement ignored, Task.add_requirements() must be called before Task.init()') if not os.path.exists(package_name):
cls._force_requirements[str(package_name)] = package_version cls._force_requirements[package_name] = package_version
return
try:
import pkg_resources
except ImportError:
get_logger("task").warning("Requirement file %s skipped since pkg_resources is not installed" % package_name)
else:
with Path(package_name).open() as requirements_txt:
for req in pkg_resources.parse_requirements(requirements_txt):
if req.marker is None or pkg_resources.evaluate_marker(str(req.marker)):
cls._force_requirements[req.name] = str(req.specifier)
@classmethod @classmethod
def ignore_requirements(cls, package_name): def ignore_requirements(cls, package_name):