将python类导入到包中的另一个文件夹中

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)

但为什么????

Aso*_*tos 2

我具体不了解 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.