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

时间:2013-11-22 22:57:57

标签: python import module flask

我正在尝试从我的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

但为什么????

1 个答案:

答案 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任何其他模块(甚至是子文件夹中的模块!)中导入位于根目录中的任何模块。