Как импортировать в не пакет из пакета в Python

Это структура приложения.

app/
  setup.py
  package/
    __init__.py
    file.py 
  tests/
   tests.py
  ...

Пытаюсь импортировать из file.py в tests.py, но выкидывает ValueError: Attempted relative import in non-package

Следовательно, мой вопрос: как импортировать в не-пакет из пакета в python?

Добавьте пустой conftest.py в каталог app: $ touch app/conftest.py и импортируйте как обычно: from package import file, import package.file, from package.file import some_func и т. д.

hoefling 29.05.2018 13:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
177
3

Ответы 3

Используйте приведенный ниже код в вашем tests.py

from ..package import file

Не работает. Та же ошибка.

riser101 29.05.2018 11:29

Вы можете использовать import_module из importlib в вашем tests.py:

from importlib import import_module

files = import_module("package.file")

Также, насколько я видел, доступен для python 2.7.

Обновлено: Это предполагает, что структура верхнего уровня «приложение» является пакетом. т.е. имеет файл __init__.py

Нет, это не посылка.

riser101 29.05.2018 11:53

Или вы можете добавить путь к sys:

import sys
sys.path.append('/path/to/folder/')
import file

Другие вопросы по теме