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

Импорт 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
4b9b3361

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