From 92ca04bf10c7bb832039d859f945f43ef8f234fd Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Mon, 15 Aug 2022 15:00:45 -0400 Subject: [PATCH] simply example --- README.md | 23 +++++++++++++++++------ shadow_import_issue/__init__.py | 8 ++------ shadow_import_issue/c_exts/_child.pyx | 5 ++++- shadow_import_issue/c_exts/py_mod.py | 1 - shadow_import_issue/sub/child.py | 5 ++++- 5 files changed, 27 insertions(+), 15 deletions(-) delete mode 100644 shadow_import_issue/c_exts/py_mod.py diff --git a/README.md b/README.md index f4c44d4..8b7b480 100644 --- a/README.md +++ b/README.md @@ -36,15 +36,26 @@ docker run --rm shadow-import-issue Expected output is to fail with: ``` -pure-python VAR + +VAR + Traceback (most recent call last): File "/src/test.py", line 1, in import shadow_import_issue - File "/src/shadow_import_issue/__init__.py", line 5, in - from .c_exts import _child # isort:skip - File "shadow_import_issue/c_exts/_child.pyx", line 1, in init shadow_import_issue.c_exts._child - from shadow_import_issue.shadow import VAR -ImportError: cannot import name VAR + File "/src/shadow_import_issue/__init__.py", line 3, in + import shadow_import_issue.c_exts._child # isort:skip + File "shadow_import_issue/c_exts/_child.pyx", line 4, in init shadow_import_issue.c_exts._child + print(shadow_import_issue.shadow.VAR) +AttributeError: module 'shadow_import_issue.c_exts.shadow_import_issue.shadow' has no attribute 'VAR' ``` The module and variable will import fine with Python, but will fail the import from the Cython module. + + +## Analysis + +- This only happens with editable install +- This only occurs with `setuptools>=64.0.0` + - `setuptools>=64.0.0` changed from using `.egg-link` to `.pth` + editable loader +- The module loaded by Cython has the name `shadow_import_issue.c_exts.shadow_import_issue.shadow` and is loaded from `shadow_import_issue/c_exts/shadow.py` +- The issue does not happen with `Cython==3.0.0a11` diff --git a/shadow_import_issue/__init__.py b/shadow_import_issue/__init__.py index cd8b01d..892ecc0 100644 --- a/shadow_import_issue/__init__.py +++ b/shadow_import_issue/__init__.py @@ -1,7 +1,3 @@ -from .sub import child # isort:skip +import shadow_import_issue.sub.child # isort:skip -print("pure-python", child.VAR) - -from .c_exts import _child # isort:skip - -print("cython", _child.VAR) +import shadow_import_issue.c_exts._child # isort:skip diff --git a/shadow_import_issue/c_exts/_child.pyx b/shadow_import_issue/c_exts/_child.pyx index 2ee6b05..a9b4979 100644 --- a/shadow_import_issue/c_exts/_child.pyx +++ b/shadow_import_issue/c_exts/_child.pyx @@ -1 +1,4 @@ -from shadow_import_issue.shadow import VAR +import shadow_import_issue.shadow + +print(shadow_import_issue.shadow) +print(shadow_import_issue.shadow.VAR) diff --git a/shadow_import_issue/c_exts/py_mod.py b/shadow_import_issue/c_exts/py_mod.py deleted file mode 100644 index 7f96e8c..0000000 --- a/shadow_import_issue/c_exts/py_mod.py +++ /dev/null @@ -1 +0,0 @@ -# empty on purpose diff --git a/shadow_import_issue/sub/child.py b/shadow_import_issue/sub/child.py index 2ee6b05..a9b4979 100644 --- a/shadow_import_issue/sub/child.py +++ b/shadow_import_issue/sub/child.py @@ -1 +1,4 @@ -from shadow_import_issue.shadow import VAR +import shadow_import_issue.shadow + +print(shadow_import_issue.shadow) +print(shadow_import_issue.shadow.VAR)