python包装导致importerror

时间:2010-12-31 20:45:47

标签: python linux packages importerror

当我尝试在__init__.py文件中导入变量时,我遇到了令人讨厌的导入错误。我附上了涉及的文件和我的目录结构:

#/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
[me@archlinux app]$ pwd
/home/me/app
[me@archlinux 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

[me@archlinux 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']

app中没有数据库:)

5 个答案:

答案 0 :(得分:4)

app/__init__.py中可能存在一个问题,在某种程度上会引发错误,可能是语法错误。这些错误随后会被隐藏为导入错误。

放一个

import pdb;pdb.set_trace()

在尝试导入的模块的开头。然后,您可以单步执行该模块以查看真正的错误。

答案 1 :(得分:0)

这通常是由Python发现一个名称与您认为的名称不同的程序包或模块引起的。当你尝试使用包空间运行它时,我也会发生这种情况。首先尝试将默认目录更改为home,然后重试。如果仍然失败,请尝试添加到模块的顶部:

from __future__ import absolute_import

这可以防止在包空间中使用相对导入的旧默认行为。

此外,在调试器会话中,打印出__file__属性并检查它是否符合预期。

答案 2 :(得分:0)

“app / app”遇到麻烦,两个目录都在搜索路径中。

答案 3 :(得分:0)

从堆栈跟踪看,以下情况似乎如下:

  • 在应用内部导入views.post
  • 从模型中导入帖子
  • 模型从app
  • 导入数据库
  • 将导入app,导入视图......

所以,看起来像循环导入?

答案 4 :(得分:0)

我看到“ImportError:No module named”,因为我的模块没有执行权限。