2010-12-31 5 views
1

Я получаю раздражающую ошибку импорта при попытке импортировать переменную в файл __init__.py. Я приложил файлы и мою структуру каталогов:python packaging вызывает importerror

#/home/me/app/app/__init__.py 
from flaskext.sqlalchemy import SQLAlchemy 

db = SQLAlchemy(app) 

#/home/me/app/app/models/__init__.py 
from datetime import datetime 
from app import db 

#shell 
[[email protected] app]$ pwd 
/home/me/app 
[[email protected] app]$ ./manage.py 
/home/me/app/app/__init__.pyc 
Traceback (most recent call last): 
    File "./manage.py", line 7, in <module> 
    from app import app 
    File "/home/me/app/app/__init__.py", line 3, in <module> 
    from app.views.post import post 
    File "/home/me/app/app/views/post.py", line 4, in <module> 
    from app.models import Post 
    File "/home/me/app/app/models/__init__.py", line 5, in <module> 
    from app import db 
ImportError: cannot import name db 

[[email protected] app]$ tree 
. 
├── apikey.txt 
├── manage.py 
├── app 
│   ├── forms 
│   │   ├── __init__.py 
│   │   └── __init__.py~ 
│   ├── __init__.py 
│   ├── __init__.py~ 
│   ├── __init__.pyc 
│   ├── models 
│   │   ├── __init__.py 
│   │   ├── __init__.py~ 
│   │   └── __init__.pyc 
│   ├── static 
│   │   ├── css 
│   │   │   └── style.css 
│   │   ├── images 
│   │   │   ├── favicon.png 
│   │   │   ├── logo.png 
│   │   │   ├── text_logo.png 
│   │   │   ├── thumb_down_active.png 
│   │   │   ├── thumb_down_inactive.png 
│   │   │   ├── thumb_up_active.png 
│   │   │   └── thumb_up_inactive.png 
│   │   ├── js 
│   │   │   └── index.js 
│   │   └── sitemap.xml 
│   ├── templates 
│   │   ├── 404.html 
│   │   ├── 500.html 
│   │   ├── about.html 
│   │   ├── base.html 
│   │   ├── feedback 
│   │   │   └── feedback_form.html 
│   │   ├── form.html 
│   │   ├── posts 
│   │   │   ├── comment.html 
│   │   │   ├── post.html 
│   │   │   └── posts.html 
│   │   ├── spam.html 
│   │   ├── terms.html 
│   │   └── users 
│   │    ├── login_form.html 
│   │    └── sign_up_form.html 
│   ├── util 
│   │   ├── forms.py 
│   │   ├── honeypot.py 
│   │   ├── __init__.py 
│   │   ├── __init__.py~ 
│   │   ├── json_http.py 
│   │   ├── models.py 
│   │   └── spam.py 
│   └── views 
│    ├── feedback.py 
│    ├── __init__.py 
│    ├── __init__.pyc 
│    ├── post.py 
│    ├── post.pyc 
│    └── user.py 
├── settings.py 
├── settings.pyc 
└── TiddlyWiki.html 

13 directories, 49 files 

В чем может быть проблема?

Некоторых играть с pdb_trace() помещенных перед импортом:

(Pdb) import app 
(Pdb) app 
<module 'app' from '/home/ramin/app/app/__init__.pyc'> 
(Pdb) dir(app) 
['Flask', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'views'] 

нет дб в приложении :)

ответ

3

Существует всего проблема в app/__init__.py, что вызывает ошибку там, как-то , возможно синтаксическая ошибка. Эти ошибки имеют тенденцию скрываться как ошибки импорта позже.

Помещенный

import pdb;pdb.set_trace() 

В начале модуля, который он пытается импортировать. Затем вы можете пройти через этот модуль, чтобы увидеть реальную ошибку.

+0

Я уже пробовал отлаживать его с помощью оператора печати, но спасибо за подсказку – TheOne

+1

@ Absolute0: Ну, я не предлагал заявление печати. –

+0

@ Absolute0: Итак, снова: поставьте это заявление pdb и научитесь проходить свою программу. Это поможет. –

0

Это чаще всего связано с тем, что Python находит пакет или модуль с тем же именем, который отличается от того, который вы считаете. Я также могу случиться, когда вы пытаетесь запустить его из пространства пакета. Сначала попробуйте изменить каталог по умолчанию для дома и повторите попытку. Если он по-прежнему не удается, попробуйте добавить в верхнюю части ваших модулей:

from __future__ import absolute_import 

Это предотвращает старое поведение, используя относительный импорт из пакета пространства по умолчанию.

Также в сеансе отладчика распечатайте атрибут __file__ и убедитесь, что это то, что вы ожидаете.

0

«приложение/приложение» запрашивает проблемы, оба каталога находятся в пути поиска.

0

Из StackTrace кажется следующее происходит:

  • внутри приложения вы импортировать views.post
  • это импортирует сообщение из моделей
  • Модели импорта БД из приложения
  • , который будет импортное приложение, которое будет импортировать виды ...

так, похоже, циклический импорт?

0

Я видел «ImportError: No module named», потому что у моих модулей не было разрешений на выполнение.