Mat*_*att 6 python import module flask
我正在尝试从我的python包的另一个文件夹中导入一个python类,但我这个错误"没有模块命名模型".
这是一个Flask项目.
-app
|-run.py
|-myapp
|- libs
|- updateto
|- __init__.py (empty)
|- connection.py
|- removeto
|- __init__.py (empty)
|- static
|- templates
|- __init__.py (NOT empty)
|- routes.py
|- models.py
Run Code Online (Sandbox Code Playgroud)
我的init .py:
from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///maindb.db'
from models import db
db.init_app(app)
import myapp.routes
Run Code Online (Sandbox Code Playgroud)
在我的models.py中,我有一个名为:application的类
在connection.py中我想导入我的类"应用程序".我试过"从模型导入应用程序",但我有这个错误"没有模块命名模型".
我认为通过修改"updateto"文件夹中的init.py可以达到这个目标,但我不确定,因为我不清楚init .py文件的功能......
谢谢
编辑:
这很奇怪,如果在connection.py下我添加"import myapp"和"print(help(myapp))",我输出这个:
Help on package myapp:
NAME
myapp
FILE
c:\app\myapp\__init__.py
PACKAGE CONTENTS
libs (package)
models
routes
DATA
app = <Flask 'myapp'>
Run Code Online (Sandbox Code Playgroud)
但如果我尝试"从myapp导入模型"我有这个错误"ImportError:无法导入名称模型"
EDIT2:
如果我尝试添加connection.py"来自myapp导入应用程序",它可以工作,但如果我尝试导入模型则不行......我很惊讶.我尝试添加myapp/init .py:
__all__ = ["models", "routes]
Run Code Online (Sandbox Code Playgroud)
但同样的错误......
EDIT3:
hummmm我已经将libs文件夹下的所有模块移动到myapp中,当我尝试从模型导入应用程序中输入connection.py时,我总是出现同样的错误"ImportError:无法导入名称应用程序"
connection.py中的其他测试:
import models
print(models)
Output:
<module 'myapp.models' from 'C:\app\myapp\models.pyc'>
Run Code Online (Sandbox Code Playgroud)
我可以导入名为models的模块,但是我无法在models.py下导入该类
EDIT4:
好的,我想我发现了问题.这是我在myapp中的ini .py,因为如果我评论这个文件内容,connection.py现在可以在模型中导入我的类应用程序.我运行使用routes.py的文件run.py,调用operation.py的是他
通过一些测试,我发现了创建错误的行:
from models import db
db.init_app(app)
import myapp.routes
Run Code Online (Sandbox Code Playgroud)
但为什么????
我具体不了解 Flask,但在 Python 中,通常应该__init__.py在每个文件夹和子文件夹中包含一个 ,以便将它们识别为模块和/或包。
__init__.py在您提供的图中,文件夹中没有app。如果可以解决您的问题,请尝试放置一个并重新发布。
如果不起作用,请尝试:
import os
print(os.getcwd())
Run Code Online (Sandbox Code Playgroud)
如果当前工作目录不是该app目录,则必须解决此问题。一种方法是:
import sys
sys.path.append('/path/to/app')
import myapp.models
Run Code Online (Sandbox Code Playgroud)
您始终可以通过检查来查看模块的搜索路径中有哪些目录sys.path。
更新:抱歉,我刚刚意识到您可能正在尝试connections.py作为脚本运行。这会将您的工作目录更改为connections.py. connections.py尝试从主脚本中import models导入,connections.py看看是否出现错误。
更新(回复编辑4):(我还没有足够的声誉点来发表评论,所以我在这里回复)
from models import db
db.init_app(app)
import myapp.routes
Run Code Online (Sandbox Code Playgroud)
这段代码的问题在于import myapp.routes. 将其更改为import routes,它应该可以工作。根据经验,主脚本的目录是根目录。您可以使用简单的import module.