2013-09-30 4 views
2

У меня есть Python 2.7 проект, который выглядит следующим образом:Почему абсолютный импорт не может найти мой модуль?

myproject\

- __init__.py 
- __main__.py 
- foo.py 

Я хотел бы использовать absolute imports, в соответствии с требованиями PEP 8, но когда я пытаюсь сделать это в __main__ .py:

from myproject.foo import bar 

С python -m myproject

я получаю:

ImportError: No module named myproject.foo

Что я делаю неправильно?

+0

Что вы делали, чтобы специально вызвать это исключение? 'python -m myproject'? Если да, отредактируйте свой вопрос с этой информацией –

+1

Да. Я отредактировал вопрос. –

ответ

2

После немного более погуглить это turns out, все, что мне нужно сделать, это добавить :

from __future__ import absolute_import 

Это добавляет некоторые будущие теплоизолирующие для Python 3.Note что PyDev не может найти модули таким образом. Я открою для этого отдельный вопрос.

+1

Можете упомянуть в своем вопросе, что вы используете Python 2.x (и помечайте его как таковой тоже для актуальности) –

+0

Хорошая точка. Я добавил эту деталь. –

1

Для этого необходимо, чтобы myproject был на вашем пути Python. Вы можете сделать это извне, установив переменную PYTHONPATH или внутри программы, добавив ее в sys.path.

(Обратите внимание, что нет никакой конвенции использовать дважды подчеркиванием имена на что-либо иное, чем __init__.py. Ваш __main__.py кажется очень странное имя.)

+2

'__main__' понимается python, если вы' python -m' пакет. – SingleNegationElimination

+1

Я использовал '__main __. Py', потому что Python [ищет его] (http://stackoverflow.com/questions/4042905/what-is-main-py) при запуске' python myproject'. –

+0

Прохладный, по какой-то причине я никогда раньше не сталкивался с этим. –

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