Python relative-import script два уровня вверх
Я боролся с импортом в моем пакете в течение последнего часа.
У меня такая структура каталогов:
main_package
|
| __init__.py
| folder_1
| | __init__.py
| | folder_2
| | | __init__.py
| | | script_a.py
| | | script_b.py
|
| folder_3
| | __init__.py
| | script_c.py
Я хочу получить код в script_b.py
, а также код из script_c.py
из script_a.py
. Как я могу это сделать?
Если я положил простой import script_b
внутри script_a.py
, когда я запустил
from main_package.folder_1.folder_2 import script_b
Меня встречает
ImportError: no module named "script_b"
Для доступа к script_c.py
я не знаю. Я не смог найти какую-либо информацию о доступе к файлам на два уровня, но я знаю, что могу импортировать файлы на один уровень с помощью
from .. import some_module
Как я могу получить доступ к обеим этим файлам из script_a.py
?
Ответы
Ответ 1
Чтобы получить доступ к script_c и script_b из script_a, вы должны использовать:
from ...folder_3 import script_c
from . import script_b
Или, если вы используете python3, вы можете импортировать script_b из script_a, просто используя:
import script_b
Однако вы, вероятно, должны использовать абсолютный импорт:
from mypackage.folder_3 import script_c
from mypackage.folder1.folder2 import script_b
Также см.: Абсолютный и относительный импорт
Ответ 2
import script_b
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..','..', 'folder_3'))
from script_c import *