python Flask 导入。导入错误未知位置

问题描述 投票:0回答:9

我正在尝试从位于网站文件中的init.py 导入create_app 但每次我尝试运行我得到的代码

ImportError: cannot import name 'create_app' from 'website' (unknown location)

这是我的文件

.vscode
env
website
   --static
   --templates
   --__init__.py
   --auth.py
   --views.py
   --models.py
main.py

初始化.py

from flask import Flask
def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'hello'
    return app

主.py

from website import create_app
app = create_app
if __name__ == '__main__':
    app.run(debug=True)

认为这是唯一不起作用的方法我尝试此方法来检查错误是否来自 vscode 但它只是来自此方法 我试过 应用程序.py

from flask import Flask 
app = Flask(__name__)
@app.route("/")
def home():
    return "hello Flask"

当我在终端中写入“python -mflask run”时 我会得到一个显示“hello Flask”的网站 但是当我按下运行图标时我什么也没得到

与第一个不同,如果我运行它,我会收到导入错误未知位置 如果我使用

python -m flask run I would get 

Error: could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module not found in the current directory.

以为一切都同步到 Github 在这两个环境中,我都在“脚本”环境中工作

python flask visual-studio-code python-import importerror
9个回答
1
投票

我想出的一个修复方法是将 name 添加到 init 文件内定义 create_app 的函数中。 示例:

从烧瓶导入烧瓶

def create_app(名称): 应用程序 = Flask(名称)


0
投票

导入时,尝试

from website.templates import create_app
。因此,基本上在您将其从网站导入后,在您想要从中导入的子文件夹后面添加
.
(在本例中为
templates
)。


0
投票

我遇到了同样的事情,但这些文件“模型、视图等”似乎不在网站文件夹中,它们位于网站文件夹中的静态文件夹内,这就是它不起作用的原因。 我刚刚手动修复了它们。


0
投票

对于后来遇到此错误的人(例如我自己),请务必检查您的主包的

__init__.py

文件位于正确的位置。


0
投票

您忘记创建环境变量。 如果您使用 Mac 或 Linux

export FLASK_APP=main.py
如果你打开窗户
set FLASK_APP=main.py

main.py 中的最后一个应该是

app = create_app()


0
投票

试试这个 在你的 main.py 中

from website.init import create_app

或 将文件 init 更改为 init.py 然后在你的 main.py 中

from website._init_ import create_app

0
投票

我找到了解决办法。

您的

__init__.py
不应位于模板文件夹中,请将其移至网站文件夹中。


0
投票

我设法修复它。

很简单你会感到惊讶, 只需转到文件 init.py 并先运行它,然后再运行 main.py 并运行它。

我认为问题是由于导入后的两个文件都没有运行而引起的。 因此,导入后您必须运行所有文件。

我希望它有效。


0
投票

文件夹结构:

.vscode/
env/
website/
   -- static/
   -- templates/
   -- __init__.py
   -- auth.py
   -- views.py
   -- models.py
main.py

正确的进口声明:

from website.template import create_app

create_app
模块导入
website.template
函数解决了这个问题,因为 __init__.py 位于 website/template/__init__.py

main.py
中的导入语句是:

from website import create_app

此声明表明

create_app
直接位于
website
包内,但在实际的文件夹结构中,它位于
website.template
模块内。

© www.soinside.com 2019 - 2024. All rights reserved.