diff --git a/news/1282.removal.md b/news/1282.removal.md new file mode 100644 index 0000000000000000000000000000000000000000..dff0c9634d502c8cc8d538007053313623af53a0 --- /dev/null +++ b/news/1282.removal.md @@ -0,0 +1 @@ +Deprecate the top-level imports from `pdm` module, it will be removed in the future. diff --git a/pdm/__init__.py b/pdm/__init__.py index 40eaeb522815b4035f7d4c68715ca770f82cf724..dd45887c98e50d81f8177d1a2cc380ea16e92a7a 100644 --- a/pdm/__init__.py +++ b/pdm/__init__.py @@ -1,18 +1,36 @@ +import warnings from pkgutil import extend_path +from typing import Any __path__ = extend_path(__path__, __name__) # type: ignore # Export for plugin use -from pdm.cli.commands.base import BaseCommand -from pdm.core import Core -from pdm.installers import InstallManager, Synchronizer -from pdm.project import Config, ConfigItem, Project +from pdm.cli.commands.base import BaseCommand as _BaseCommand +from pdm.core import Core as _Core +from pdm.installers import InstallManager as _InstallManager +from pdm.installers import Synchronizer as _Synchronizer +from pdm.project import Config as _Config +from pdm.project import ConfigItem as _ConfigItem +from pdm.project import Project as _Project -__all__ = ( - "Project", - "Config", - "ConfigItem", - "BaseCommand", - "InstallManager", - "Synchronizer", - "Core", -) +_deprecated = { + "Project": (_Project, "pdm.project"), + "Config": (_Config, "pdm.project"), + "ConfigItem": (_ConfigItem, "pdm.project"), + "BaseCommand": (_BaseCommand, "pdm.cli.commands.base"), + "InstallManager": (_InstallManager, "pdm.installers"), + "Synchronizer": (_Synchronizer, "pdm.installers"), + "Core": (_Core, "pdm.core"), +} + +__all__ = tuple(_deprecated) + + +def __getattr__(name: str) -> Any: + if name in _deprecated: + obj, module = _deprecated[name] + warnings.warn( + f"Deprecating top-level `from pdm import {name}`. " + f"Import it from {module} instead." + ) + return obj + raise AttributeError(name) diff --git a/pdm/cli/commands/venv/__init__.py b/pdm/cli/commands/venv/__init__.py index afc177236e2af174592b0a30b695ca12c0354fdf..e87e33df760c4699387be497f36d8a24fee0db72 100644 --- a/pdm/cli/commands/venv/__init__.py +++ b/pdm/cli/commands/venv/__init__.py @@ -1,7 +1,7 @@ import argparse from typing import List -from pdm import Project +from pdm.project import Project from pdm.cli.commands.base import BaseCommand from pdm.cli.commands.venv.activate import ActivateCommand from pdm.cli.commands.venv.create import CreateCommand diff --git a/pdm/cli/commands/venv/backends.py b/pdm/cli/commands/venv/backends.py index 05a0043f6a9d218b8997cec51ee4c5079c042e4b..94d292314af90c44a057c151405289c279faa72a 100644 --- a/pdm/cli/commands/venv/backends.py +++ b/pdm/cli/commands/venv/backends.py @@ -5,7 +5,8 @@ import sys from pathlib import Path from typing import Any, List, Mapping, Optional, Tuple, Type -from pdm import Project, termui +from pdm.project import Project +from pdm import termui from pdm.cli.commands.venv.utils import get_venv_prefix from pdm.exceptions import PdmUsageError, ProjectError from pdm.models.python import PythonInfo diff --git a/pdm/cli/commands/venv/create.py b/pdm/cli/commands/venv/create.py index 9ceee9a33a60389d6887806dd114d3b1a11f079d..d2587d437b00bb9f67f7114c774f9d816cf357be 100644 --- a/pdm/cli/commands/venv/create.py +++ b/pdm/cli/commands/venv/create.py @@ -1,6 +1,7 @@ import argparse -from pdm import BaseCommand, Project +from pdm.cli.commands.base import BaseCommand +from pdm.project import Project from pdm.cli.commands.venv.backends import BACKENDS from pdm.cli.options import verbose_option diff --git a/pdm/cli/commands/venv/purge.py b/pdm/cli/commands/venv/purge.py index 3026ba456459934ff8ea95b23a5691a309bcd319..eaf4894e9da023eeb36223dc85b2c411268aadda 100644 --- a/pdm/cli/commands/venv/purge.py +++ b/pdm/cli/commands/venv/purge.py @@ -1,7 +1,8 @@ import argparse import shutil -from pdm import Project, termui +from pdm.project import Project +from pdm import termui from pdm.cli.commands.base import BaseCommand from pdm.cli.commands.venv.utils import iter_central_venvs from pdm.cli.options import verbose_option diff --git a/pdm/cli/commands/venv/remove.py b/pdm/cli/commands/venv/remove.py index 9ce3c280f457117709a83af2e45318185e7f7c4d..a8af8ca0414aa33d7133ab746976fa9ac2ff4a05 100644 --- a/pdm/cli/commands/venv/remove.py +++ b/pdm/cli/commands/venv/remove.py @@ -2,7 +2,8 @@ import argparse import shutil from pathlib import Path -from pdm import Project, termui +from pdm.project import Project +from pdm import termui from pdm.cli.commands.base import BaseCommand from pdm.cli.commands.venv.utils import iter_venvs from pdm.cli.options import verbose_option