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

Пилинг: относительный импорт должен быть

Я проверяю модуль с Pylint. Проект имеет следующую структуру:

/builder
    __init__.py
    entity.py
    product.py

Внутри продукта я импортирую объект следующим образом:

from entity import Entity

но Пилинт сетует, что:

************* Module builder.product
W:  5,0: Relative import 'entity', should be 'builder.entity'

Однако from builder.entity import Entity не распознает пакет, а from ..builder.entity import Entity тоже не работает. Что Пилинт жалуется? Благодаря

4b9b3361

Ответ 1

Python 2.5 вводит относительный импорт. Они позволяют вам делать

from .entity import Entity

Ответ 2

Файл __init__.py заставляет pylint думать, что ваш код является пакетом (а именно "строителем" ).

Следовательно, когда pylint видит "из Entity Entity Entity", он правильно определяет его как неявный относительный импорт (вы можете сделать явный относительный импорт, используя ".", поскольку python 2.6, как рекламировали другие плакаты) и сообщает об этом.

Затем, если "from builder.entity import Entity" не работает, это PYTHONPATH pb: убедитесь, что каталог, содержащий каталог "builder", находится в вашем PYTHONPATH (альтернативный pb, предложенный gurney alex). Если вы не намеревались написать пакет, то удаление __init__.py, вероятно, будет способом.

Ответ 3

Ответ glglgl правильный, если у вас есть более новая версия Python.

Однако, если вы этого не сделаете, вы должны просто убедиться, что пакет, который вы проверяете, находится в вашем PYTHONPATH. См. Примеры ниже.

[sebastian ~/tmp/testpy]$ pylint -r n a.py 
************* Module a
C:  1: Missing docstring
F:  1: Unable to import 'testpy.b'
[sebastian ~/tmp/testpy]$ PYTHONPATH=".." pylint -r n a.py 
************* Module a
C:  1: Missing docstring

Ответ 4

Что вы получите, если вы включили следующие строки вверху product.py:

import builder
print builder

Я предполагаю, что вы импортируете другой модуль/пакет builder из какого-то места в PYTHONPATH, который находится раньше, чем вы используете.