Это __init__.py
, а не init.py
. Убедитесь, что каждый каталог в иерархии содержит его для возможности импорта.
РЕДАКТИРОВАТЬ: Мне удалось воспроизвести его.
Вот структура каталогов:
cesar@cesar-laptop:/tmp/asdasd$ tree
.
`-- myapp
|-- __init__.py
|-- models
| |-- __init__.py
| `-- models.py
|-- scripts
| |-- data.py
| `-- __init__.py
`-- tests
|-- __init__.py
`-- tests.py
Я поместил следующий код в самом начале data.py
, чтобы сузить проблему:
import sys
import pprint
pprint.pprint(sys.path)
from myapp.models.models import *
Запуск data.py
способом, указанным OP, приводит к ImportError:
cesar@cesar-laptop:/tmp/asdasd$ python myapp/scripts/data.py
['/tmp/asdasd/myapp/scripts',
'/usr/lib/python2.6',
'/usr/lib/python2.6/plat-linux2',
'/usr/lib/python2.6/lib-tk',
-- Skipped --
'/usr/local/lib/python2.6/dist-packages']
Traceback (most recent call last):
File "myapp/scripts/data.py", line 6, in
from myapp.models.models import *
ImportError: No module named myapp.models.models
Но этот способ работает как шарм:
cesar@cesar-laptop:/tmp/asdasd$ python -m myapp.scripts.data
['',
'/usr/lib/python2.6',
'/usr/lib/python2.6/plat-linux2',
'/usr/lib/python2.6/lib-tk',
-- Skipped --
'/usr/local/lib/python2.6/dist-packages']
Обратите внимание на разницу в первой записи sys.path
.