[App] Add utility to get install command for package extras (#15809)

This commit is contained in:
Ethan Harris 2022-11-24 22:29:52 +00:00 committed by GitHub
parent 8ee889bea0
commit f171657030
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 1 deletions

View File

@ -17,6 +17,30 @@ import os
from typing import List, Union
from lightning_utilities.core.imports import module_available
from packaging.requirements import Marker, Requirement
try:
from importlib import metadata
except ImportError:
# Python < 3.8
import importlib_metadata as metadata # type: ignore
def _get_extras(extras: str) -> str:
"""Get the given extras as a space delimited string.
Used by the platform to install cloud extras in the cloud.
"""
from lightning_app import __package_name__
requirements = {r: Requirement(r) for r in metadata.requires(__package_name__)}
marker = Marker(f'extra == "{extras}"')
requirements = [r for r, req in requirements.items() if str(req.marker) == str(marker)]
if requirements:
requirements = [f"'{r.split(';')[0].strip()}'" for r in requirements]
return " ".join(requirements)
return ""
def requires(module_paths: Union[str, List]):

View File

@ -3,7 +3,17 @@ from unittest import mock
import pytest
from lightning_app.utilities.imports import requires
from lightning_app import __package_name__
from lightning_app.utilities.imports import _get_extras, requires
def test_get_extras():
extras = "app-cloud" if __package_name__ == "lightning" else "cloud"
extras = _get_extras(extras)
assert "docker" in extras
assert "redis" in extras
assert _get_extras("fake-extras") == ""
@mock.patch.dict(os.environ, {"LIGHTING_TESTING": "0"})