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

Импортировать файл из родительского каталога?

У меня есть следующая структура каталогов:

application
    tests
        main.py
    main.py

application/main.py содержит некоторые функции.

tests/main.py будет содержать мои тесты для этих функций, но я не могу импортировать main.py верхнего уровня. Я получаю следующую ошибку:

ImportError: Import by filename is not supported.

Я пытаюсь импортировать, используя следующий синтаксис:

import main

Что я делаю неправильно?

4b9b3361

Ответ 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 расширение)