Подтвердить что ты не робот

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?

4b9b3361

Ответ 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 *