Импорт Script из родительского каталога
Как импортировать модуль (файл python), который находится в родительском каталоге?
В обоих каталогах есть файл __init__.py
, но я все еще не могу импортировать файл из родительского каталога?
В этом макете папки Script B пытается импортировать Script A:
Folder A:
__init__.py
Script A:
Folder B:
__init__.py
Script B(attempting to import Script A)
Следующий код в Script B не работает:
import ../scriptA.py # I get a compile error saying the "." is invalid
Ответы
Ответ 1
Вы не импортируете скрипты в Python, вы импортируете модули. Некоторые модули python также являются скриптами, которые можно запускать напрямую (они выполняют некоторую полезную работу на уровне модуля).
В целом предпочтительнее использовать абсолютный импорт, а не относительный импорт.
toplevel_package/
├── __init__.py
├── moduleA.py
└── subpackage
├── __init__.py
└── moduleB.py
В moduleB
:
from toplevel_package import moduleA
Если вы хотите запустить moduleB.py
как script, убедитесь, что родительский каталог для toplevel_package
находится в вашем sys.path
.
Ответ 2
Из docs:
from .. import scriptA
Вы можете сделать это в пакетах, но не в скриптах, которые вы запускаете напрямую. По ссылке выше:
Обратите внимание, что как явный, так и неявный относительный импорт основаны на имя текущего модуля. Поскольку имя основного модуля всегда "__main__", модули, предназначенные для использования в качестве основного модуля Приложение Python должно всегда использовать абсолютный импорт.
Если вы создаете script, который импортирует A.B.B, вы не получите ValueError.
Ответ 3
Если вы хотите запустить script напрямую, вы можете:
- Добавьте путь FolderA к переменной среды (
PYTHONPATH
).
- Добавьте путь к
sys.path
в script.
Тогда:
import module_you_wanted
Ответ 4
from ... import scriptA
вы можете найти ответы здесь Импорт модулей из родительской папки