Импортировать файл из родительского каталога?
У меня есть следующая структура каталогов:
application
tests
main.py
main.py
application/main.py содержит некоторые функции.
tests/main.py будет содержать мои тесты для этих функций, но я не могу импортировать main.py верхнего уровня. Я получаю следующую ошибку:
ImportError: Import by filename is not supported.
Я пытаюсь импортировать, используя следующий синтаксис:
import main
Что я делаю неправильно?
Ответы
Ответ 1
Если вы хотите, чтобы ваш script был более портативным, подумайте о том, чтобы найти родительский каталог автоматически:
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# import ../db.py
import db
Ответ 2
Вы должны добавить директорию приложения в свой путь:
import sys
sys.path.append("/path/to/dir")
from app import object
Или из оболочки:
setenv PATH $PATH:"path/to/dir"
Если вы используете окна:
Добавление переменной в путь в windows.
Или из командной строки:
set PATH=%PATH%;C:\path\to\dir
Ответ 3
Прежде всего вам нужно сделать ваши каталоги в пакеты, добавив __init__.py
файлы:
application
tests
__init__.py
main.py
__init__.py
main.py
Затем вы должны убедиться, что каталог выше приложения находится на sys.path
. Существует много способов сделать это, например, сделать приложение infto пакетом и установить его, или просто выполнить действия в правой папке и т.д.
Затем ваш импорт будет работать.
Ответ 4
Вы не можете импортировать файлы из родительских/родственных каталогов как таковых. Вы можете импортировать вещи только из каталогов на системном пути или в текущий каталог или в подкаталоги внутри пакета. Поскольку у вас нет файлов __init__.py
, ваши файлы не образуют пакет, и их можно импортировать только путем их размещения на системном пути.
Ответ 5
в python. существует для одного каталога,.. для родительского каталога
для импорта файла из родительского каталога, который вы можете использовать.
из.. импорт имя файла (без .py расширение)