Импортировать скрипт из родительского каталога - PullRequest
65 голосов
/ 21 января 2012

Как мне импортировать модуль (файл python), который находится в родительском каталоге?

В обоих каталогах есть файл __init__.py, но я все еще не могу импортировать файл из родительского каталога?

В этом макете папки сценарий B пытается импортировать сценарий A:

Folder A:
   __init__.py
   Script A:
   Folder B:
     __init__.py
     Script B(attempting to import Script A)

Следующий код в скрипте B не работает:

import ../scriptA.py # I get a compile error saying the "." is invalid

Ответы [ 3 ]

64 голосов
/ 21 января 2012

Вы не импортируете скрипты в Python, а импортируете модули. Некоторые модули Python также являются сценариями, которые вы можете запускать напрямую (они выполняют полезную работу на уровне модулей).

В целом, предпочтительно использовать абсолютный импорт, а не относительный импорт.

toplevel_package/
├── __init__.py
├── moduleA.py
└── subpackage
    ├── __init__.py
    └── moduleB.py

В moduleB:

from toplevel_package import moduleA

Если вы хотите запустить moduleB.py в качестве сценария, убедитесь, что родительский каталог для toplevel_package находится в вашем sys.path.

25 голосов
/ 21 января 2012

Из документов :

from .. import scriptA

Вы можете сделать это в пакетах, но не в сценариях, которые вы запускаете напрямую.По ссылке выше:

Обратите внимание, что как явный, так и неявный относительный импорт основаны на имени текущего модуля.Поскольку имя основного модуля всегда "__main__", модули, предназначенные для использования в качестве основного модуля приложения Python, всегда должны использовать абсолютный импорт.не получит ошибку ValueError.

4 голосов
/ 21 января 2012

Если вы хотите запустить скрипт напрямую, вы можете:

  1. Добавить путь FolderA к переменной среды (PYTHONPATH).
  2. Добавить путь к sys.path в вашем скрипте.

Тогда:

import module_you_wanted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...