Как импортировать метод из одного пакета в другой для приведенной ниже структуры каталогов?

#python #python-3.x #python-module #python-packaging

#python #python-3.x #python-модуль #python-упаковка

Вопрос:

Ниже приведена структура каталогов, в которой у меня возникают проблемы с импортом модулей.

 .
├── A
│   └── a.py
└── B
    └── C
        └── b.py
 

Допустим, есть метод foo() , в B/C/b.py который нужно импортировать A/a.py .

Однако, когда я пытаюсь импортировать foo() , как показано ниже —

 # A/a.py
from B.C import foo
 

Я получаю сообщение об ошибке —

 unable to import 'B.C'.
 

Альтернативным способом, который я пробовал, было использование относительного импорта, подобного этому —

 # A/a.py
from ..B.C import foo
 

Но опять же, я получаю сообщение об ошибке

 Attempted relative import beyond top-level package.
 

Как именно я должен импортировать foo() из B/C/b.py into A/a.py ?

Ответ №1:

Вам нужно структурировать свой проект как пакет.

Добавляя __init__.py файл, как указано здесь, вы указываете пакет верхнего уровня, поэтому вы сможете импортировать B/C/b.py с помощью команды:

 from src.B.C import b
 
 src
├── __init__.py
├── A
│   ├── a.py
│   └── __init__.py
└── B
    ├── __init__.py
    └── C
        ├── __init__.py
        └── b.py