Модуль импорта Python из одноуровневой папки
Я прошел через множество вопросов по относительному импорту Python, но не могу понять проблему / заставить ее работать...
Моя структура каталогов:
Driver.py
A/
Account.py
__init__.py
B/
Test.py
__init__.py
====================
Driver.py
from B import Test
=========
Account.py
class Account:
def __init__(self):
self.money = 0
====================
Test.py
from ..A import Account
==================
Когда я пытаюсь бежать
python Driver.py
Я получаю ошибку
Traceback (последний вызов был последним):
из B импорт тест
Файл "B/Test.py", строка 1, в
<module>
из..А учетной записи импортаValueError: Попытка относительного импорта за пределы пакета верхнего уровня
3 ответа
Это происходит потому, что A
а также B
являются независимыми, несвязанными, пакетами для Python.
Создать __init__.py
в том же каталоге, что и Driver.py
и все должно работать как положено.
В моем случае добавление
__init__.py
было недостаточно. Вам также необходимо добавить путь к родительскому каталогу, если вы получите ошибку «модуль не найден».
root :
|
|__SiblingA:
| \__A.py
|
|__SiblingB:
| \_ __init__.py
| \__B.py
|
Чтобы импортировать B.py из A.py, вам необходимо сделать следующее
import sys
# append the path of the parent directory
sys.path.append("..")
from SiblingB import B
print("B is successfully imported!")
Причина для
ValueError: Attempted relative import beyond toplevel package
это тот же уровень каталога, что и . Следовательно,
..A
в
from ..A import Account
выходит за рамки пакета верхнего уровня.
Вы можете решить эту проблему, создав новую папку с именем вместе с
__init__py
в эту новую папку, а затем переместите
A
а также
B
папки в
AandB
папка. Структура каталогов выглядит следующим образом:
Соответственно, содержание в
Driver.py
следует изменить как
from AandB.B import Test
.