From 7a885eaa095de739c3bf49286ce6d55c736ee5b4 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 6 Dec 2024 14:08:00 -0600 Subject: [PATCH] Add hint on build backend import with preview disabled (#9691) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See #9686 ``` ❯ uv run python -c "import uv; uv.build_sdist" Traceback (most recent call last): File "", line 1, in File "/Users/zb/workspace/uv/python/uv/__init__.py", line 45, in __getattr__ raise AttributeError(err) AttributeError: Using `uv.build_sdist` is not allowed. The uv build backend requires preview mode to be enabled, e.g., via the `UV_PREVIEW=1` environment variable. ❯ uv run python -c "import uv; uv.foo" Traceback (most recent call last): File "", line 1, in File "/Users/zb/workspace/uv/python/uv/__init__.py", line 48, in __getattr__ raise AttributeError(err) AttributeError: module 'uv' has no attribute 'foo' ❯ uv run python -c "import uv; uv.find_uv_bin" ``` --- python/uv/__init__.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/python/uv/__init__.py b/python/uv/__init__.py index 5ad0fde7c..5f18152af 100644 --- a/python/uv/__init__.py +++ b/python/uv/__init__.py @@ -28,3 +28,21 @@ if os.environ.get("UV_PREVIEW"): ] else: __all__ = ["find_uv_bin"] + + +def __getattr__(attr_name: str) -> object: + if attr_name in { + "build_sdist", + "build_wheel", + "build_editable", + "get_requires_for_build_sdist", + "get_requires_for_build_wheel", + "prepare_metadata_for_build_wheel", + "get_requires_for_build_editable", + "prepare_metadata_for_build_editable", + }: + err = f"Using `uv.{attr_name}` is not allowed. The uv build backend requires preview mode to be enabled, e.g., via the `UV_PREVIEW=1` environment variable." + raise AttributeError(err) + + err = f"module 'uv' has no attribute '{attr_name}'" + raise AttributeError(err)