当我尝试在__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中没有数据库:)
答案 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)
从堆栈跟踪看,以下情况似乎如下:
所以,看起来像循环导入?
答案 4 :(得分:0)
我看到“ImportError:No module named”,因为我的模块没有执行权限。