Python:无法导入模块

rɑːdʒɑ

我正在从https://blog.miguelgrinberg.com/学习烧瓶

我有一个文件名为 microblog.py 的应用程序微博

from app import app

我有一个名为的目录app,它包含__init__.py以下代码

from flask import Flask
from config import Config

app = Flask( __name__ )
app.config.from_object(Config)
from app import routes

但是当我运行时flask run我收到错误

ImportError: No module named 'app'

我明白,如果我想将一个目录表示为一个包,那么我必须__init__.py在目录中包含一个,并且我为app目录这样做了

目录结构

.
├── __init__.py
├── app
│   ├── __init__.py
│   ├── forms.py
│   ├── routes.py
│   └── templates
│       ├── base.html
│       ├── index.html
│       └── login.html
├── config.py
└── microblog.py

完整的堆栈跟踪


flask run                                       
 * Serving Flask app "microblog.py"
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
Usage: flask run [OPTIONS]

Error: While importing "microblog.microblog", an ImportError was raised:

Traceback (most recent call last):
  File "~/anaconda3/envs/flask_python3.5.2/lib/python3.5/site-packages/flask/cli.py", line 235, in locate_app
    __import__(module_name)
  File "~/learning/migual_flask/microblog/microblog.py", line 1, in <module>
    from app import app
ImportError: No module named 'app'

这段代码直到最近才起作用,突然开始出现问题。我无法找到哪里出错了。

非常感谢任何帮助。

谢谢。

knh190

好的,根据您发布的层次结构,很明显它应该可以工作,但我怀疑您是从错误的目录导入的。

鉴于目录:

.
├── __init__.py
├── app
│   ├── __init__.py
│   ├── forms.py
│   ├── routes.py
│   └── templates
│       ├── base.html
│       ├── index.html
│       └── login.html
├── config.py
└── microblog.py

假设您从根目录(顶部的“.”)导入它们:

$ls                                                                                                                                                        
__init__.py  app          config.py    microblog.py

$ls app
__init__.py  forms.py     routes.py

# which works
>>> import config
>>> import microblog
>>> import app

# and
>>> from app import routes
>>> from app import forms

我注意到你app = Flask()在你的app/__init__.py,这是一个非常糟糕的做法,应该尽可能避免(是什么让你认为它是好的?我想不出任何),但它对我有用:

>>> import app
>>> from app import app

# the first app is module
# the second is app = Flask()
# but the second one will overwrite the first one's name
# which is another terrible practice

你可以检查一个模块:

>>> import app
>>> help(app) # app = Flask() is there

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章