我正在尝试从我的python包的另一个文件夹中导入一个python类,但是这个错误“没有名为models的模块”。
这是一个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
我的 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
在我的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'>
但如果我尝试“来自myapp导入模型”,我就会出现此错误“ImportError:无法导入名称模型”
EDIT2:
如果我尝试添加来自myapp导入应用程序的connection.py“,它可以正常工作,但如果我尝试导入模型则不行......我很惊讶。我尝试添加myapp / init .py:
__all__ = ["models", "routes]
但同样的错误......
EDIT3:
hummmm我已将libs文件夹下的所有模块移动到myapp中,当我尝试从模型导入应用程序中输入connection.py时,我总是出现同样的错误“ImportError:无法导入名称应用程序”
connection.py中的其他测试:
import models
print(models)
Output:
<module 'myapp.models' from 'C:\app\myapp\models.pyc'>
我可以导入名为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
但为什么????
答案 0 :(得分:2)
我不是特别了解Flask,但在Python中,您通常应在每个文件夹和子文件夹中包含__init__.py
,以便将它们识别为模块和/或包。< / p>
在您提供的图表中,__init__.py
文件夹中没有app
。尝试放一个并重新发布,如果这可以解决您的问题。
如果不起作用,请尝试:
import os
print(os.getcwd())
如果当前工作目录不是app
目录,则必须解决此问题。一种方法是:
import sys
sys.path.append('/path/to/app')
import myapp.models
通过选中sys.path
,您可以随时查看模块搜索路径中的目录。
更新:抱歉,我刚才意识到您可能正在尝试将connections.py
作为脚本运行。这会将您的工作目录更改为connections.py
的目录。尝试使用connections.py
内的import models
从主脚本导入connections.py
,看看是否收到错误。
更新(回复编辑4):(我还没有足够的声誉点发表评论,所以我在这里回复)
from models import db
db.init_app(app)
import myapp.routes
这段代码中的问题是import myapp.routes
。将其更改为import routes
,它应该有效。根据经验,主脚本的目录是您的根目录。您可以使用简单的import module
从任何其他模块(甚至是子文件夹中的模块!)中导入位于根目录中的任何模块。