Ответ 1
Python 2.5 вводит относительный импорт. Они позволяют вам делать
from .entity import Entity
Я проверяю модуль с 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
тоже не работает. Что Пилинт жалуется? Благодаря
Python 2.5 вводит относительный импорт. Они позволяют вам делать
from .entity import Entity
Файл __init__.py заставляет pylint думать, что ваш код является пакетом (а именно "строителем" ).
Следовательно, когда pylint видит "из Entity Entity Entity", он правильно определяет его как неявный относительный импорт (вы можете сделать явный относительный импорт, используя ".", поскольку python 2.6, как рекламировали другие плакаты) и сообщает об этом.
Затем, если "from builder.entity import Entity" не работает, это PYTHONPATH pb: убедитесь, что каталог, содержащий каталог "builder", находится в вашем PYTHONPATH (альтернативный pb, предложенный gurney alex). Если вы не намеревались написать пакет, то удаление __init__.py, вероятно, будет способом.
Ответ 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
Что вы получите, если вы включили следующие строки вверху product.py:
import builder
print builder
Я предполагаю, что вы импортируете другой модуль/пакет builder
из какого-то места в PYTHONPATH, который находится раньше, чем вы используете.