2012-05-04 4 views
13

Я проверяю модуль с Pylint. Проект имеет такую ​​структуру:Pylint: Относительный импорт должен быть

/builder 
    __init__.py 
    entity.py 
    product.py 

В продукте я импортировать объект как это:

from entity import Entity 

но Pylint сетует, что:

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

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

ответ

14

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

from .entity import Entity 
+1

Благодарим за -1 без предупреждения. – glglgl

+3

Что значит «достаточно новый»? – PlasmaBinturong

+0

@PlasmaBinturong «достаточно новый» относится к внедрению относительного импорта в Python 2.5 или около того. – glglgl

0

Ответ 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 
+0

У меня есть __init__.py, спасибо, что указали, я редактировал мой вопрос. – pistacchio

0

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

import builder 
print builder 

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

6

Файл __init__.py делает вывод, что ваш код является пакетом (а именно «строителем»).

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

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

Смежные вопросы