У меня есть структура файла следующим образом:
├── test_package
│ ├── __init__.py
│ └── models
│ ├── __init__.py
│ ├── a.py
│ └── b.py
И следующее содержимое файла:
# a.py
from .b import B
from dataclasses import dataclass
@dataclass
class A:
b: B
# b.py
from .a import A
from dataclasses import dataclass
@dataclass
class B:
a: A
При попытке импортировать пакет a я получаю следующую ошибку.
: import test_package.models.a
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-e8165f4eb507> in <module>
----> 1 import test_package.models.a
/.../test_package/models/a.py in <module>
----> 1 from .b import B
2 from dataclasses import dataclass
3
4 @dataclass
5 class A:
/.../test_package/models/b.py in <module>
----> 1 from .a import A
2 from dataclasses import dataclass
3
4 @dataclass
5 class B:
ImportError: cannot import name 'A' from 'test_package.models.a'
Согласно журналу изменений Python3.5 , «Круговой импорт, связанный с относительным импортом, теперь поддерживается. (Предоставлено Бреттом Кэнноном и Антуаном Питроу в bpo-17636.)заставить этот относительный круговой импорт работать?
Обратите внимание, что мне нужно только выполнить этот импорт для проверки типов.
Редактировать:
В ответ на @ juanpa.arrivillaga вкомментарии, вот пример той же ошибки, происходящей с Python 2.7. Кажется, что исходные файлы находятся и выполняются, если я что-то не так понимаю.
$ cat a.py
from b import b_func
def a_func():
return "Hi"
$ cat b.py
from a import b_func
def b_func():
return "Hi"
>>> import a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "a.py", line 1, in <module>
from b import b_func
File "b.py", line 1, in <module>
from a import b_func
ImportError: cannot import name b_func