Browse Source

simply example

main
Brett Langdon 3 years ago
parent
commit
92ca04bf10
No known key found for this signature in database GPG Key ID: C2BEA329670CD664
5 changed files with 27 additions and 15 deletions
  1. +17
    -6
      README.md
  2. +2
    -6
      shadow_import_issue/__init__.py
  3. +4
    -1
      shadow_import_issue/c_exts/_child.pyx
  4. +0
    -1
      shadow_import_issue/c_exts/py_mod.py
  5. +4
    -1
      shadow_import_issue/sub/child.py

+ 17
- 6
README.md View File

@ -36,15 +36,26 @@ docker run --rm shadow-import-issue
Expected output is to fail with:
```
pure-python VAR
<module 'shadow_import_issue.shadow' from '/src/shadow_import_issue/shadow.py'>
VAR
<module 'shadow_import_issue.c_exts.shadow_import_issue.shadow' from '/src/shadow_import_issue/c_exts/shadow.py'>
Traceback (most recent call last):
File "/src/test.py", line 1, in <module>
import shadow_import_issue
File "/src/shadow_import_issue/__init__.py", line 5, in <module>
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 <module>
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`

+ 2
- 6
shadow_import_issue/__init__.py View File

@ -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

+ 4
- 1
shadow_import_issue/c_exts/_child.pyx View File

@ -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)

+ 0
- 1
shadow_import_issue/c_exts/py_mod.py View File

@ -1 +0,0 @@
# empty on purpose

+ 4
- 1
shadow_import_issue/sub/child.py View File

@ -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)

Loading…
Cancel
Save