Импорт определенной части относительного подмодуля в Python - PullRequest
0 голосов
/ 08 апреля 2019

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

myproject/
 |--- __init__.py
 |--- application.py
 |--- modules/
       |--- __init__.py
       |--- parser.py
 |--- utils/
       |-- __init__.py
       |-- helpers.py

В utils/helpers.py:

def find_stuff():
    return stuff

def help_me():
    return some_help

В modules/parser.py я хочу импортировать find_stuff (и только это).

Я пробовал следующее:

from ..utils.helpers import find_stuff

Но ...

ImportError: cannot import name 'find_stuff' from 'myproject.utils.helpers' (/Users/myself/myproject/utils/helpers.py)

Что здесь нужно сделать?

Примечания:

  • все работало нормально с политикой абсолютного импорта всего проекта, пока я не начал использовать Pytest, а затем весь ад развалился
  • нет, я не хочу from ..utils import helpers, а затем использовать helpers.find_stuff в parser.py - я предполагаю, что система импорта Python достаточно продумана, чтобы мы могли точно избежать этого
  • в сообщении об ошибке мы видим, что Python удается найти правильный файл, однако по какой-то причине он просто не импортирует имя функции / класса / объекта, несмотря на то, что оно присутствует в файле

Ответы [ 2 ]

3 голосов
/ 08 апреля 2019

Под utils у вас нет файла __init__.py.Я думаю, что вам понадобится один, и даже пустой поможет вам.

2 голосов
/ 08 апреля 2019

Вы уже прочитали этот вопрос уже?Это зависит от того, что вы хотите сделать.Если вы пишете что-то, что является просто модулем,

from myproject.utils.helpers import find_stuff

должно работать.

...