首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flask错误的故障排除是werkzeug路由

Flask错误的故障排除是werkzeug路由
EN

Stack Overflow用户
提问于 2019-05-14 17:43:34
回答 2查看 2.4K关注 0票数 1

我正在按照一个教程来做最简单的"Hello World“Flask应用程序,如https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world所述:

对于上下文,我在C驱动器的根目录下创建了目录,以避免潜在的路径问题。我正在运行Python 3.8、Flask 1.0.2和werkzeug 0.15.2

在发出flask命令之前,我要做两件事。创建虚拟环境并安装本地flask版本

代码语言:javascript
运行
复制
$ python -m venv venv
$ venv\Scripts\activate
(venv) $ pip install flask

并设置FLASK_APP环境变量

代码语言:javascript
运行
复制
(venv) $ set FLASK_APP=microblog.py

当我发出"flask run“命令时,顶层脚本就会运行(内容在这里)

代码语言:javascript
运行
复制
from app import app

它调用app文件夹中的__init__.py文件,该文件夹包含:

代码语言:javascript
运行
复制
from flask import Flask

app = Flask(__name__) #The name "app" is being passed

from app import routes

第二行失败,并显示以下错误输出:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "C:\Python38\lib\runpy.py", line 192, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Python38\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\microblog\venv\Scripts\flask.exe\__main__.py", line 9, in <module>
  File "c:\microblog\venv\lib\site-packages\flask\cli.py", line 894, in main
    cli.main(args=args, prog_name=name)
  File "c:\microblog\venv\lib\site-packages\flask\cli.py", line 557, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "c:\microblog\venv\lib\site-packages\click\core.py", line 717, in main
    rv = self.invoke(ctx)
  File "c:\microblog\venv\lib\site-packages\click\core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "c:\microblog\venv\lib\site-packages\click\core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "c:\microblog\venv\lib\site-packages\click\core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "c:\microblog\venv\lib\site-packages\click\decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "c:\microblog\venv\lib\site-packages\click\core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "c:\microblog\venv\lib\site-packages\flask\cli.py", line 767, in run_command
    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
  File "c:\microblog\venv\lib\site-packages\flask\cli.py", line 293, in __init__
    self._load_unlocked()
  File "c:\microblog\venv\lib\site-packages\flask\cli.py", line 317, in _load_unlocked
    self._app = rv = self.loader()
  File "c:\microblog\venv\lib\site-packages\flask\cli.py", line 372, in load_app
    app = locate_app(self, import_name, name)
  File "c:\microblog\venv\lib\site-packages\flask\cli.py", line 235, in locate_app
    __import__(module_name)
  File "c:\microblog\microblog.py", line 1, in <module>
    from app import app
  File "c:\microblog\app\__init__.py", line 5, in <module>
    app = Flask(__name__) #The name "app" is being passed
  File "c:\microblog\venv\lib\site-packages\flask\app.py", line 558, in __init__
    self.add_url_rule(
  File "c:\microblog\venv\lib\site-packages\flask\app.py", line 66, in wrapper_func
    return f(self, *args, **kwargs)
  File "c:\microblog\venv\lib\site-packages\flask\app.py", line 1216, in add_url_rule
    self.url_map.add(rule)
  File "c:\microblog\venv\lib\site-packages\werkzeug\routing.py", line 1562, in add
    rule.bind(self)
  File "c:\microblog\venv\lib\site-packages\werkzeug\routing.py", line 711, in bind
    self.compile()
  File "c:\microblog\venv\lib\site-packages\werkzeug\routing.py", line 767, in compile
    self._build = self._compile_builder(False)
  File "c:\microblog\venv\lib\site-packages\werkzeug\routing.py", line 1128, in _compile_builder
    return self.BuilderCompiler(self).compile(append_unknown)
  File "c:\microblog\venv\lib\site-packages\werkzeug\routing.py", line 1119, in compile
    co = types.CodeType(*code_args)
TypeError: code() takes at least 14 arguments (13 given)

除了下面的答案之外,请确保正确设置了PATH变量。在我的例子中,我有一个Anaconda安装和一个具有冲突版本的常规Python安装。最后,应用程序通过Anaconda提示符运行。要解决此类问题,请尝试将bash_profile中的Anaconda路径添加到windows的PATH变量中

祝你快乐:)!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-14 18:14:29

我已经让服务器启动并运行了。下面是我的项目结构:

代码语言:javascript
运行
复制
.
├── app
│   ├── __init__.py
│   └── routes.py
├── microblog.py
└── venv

下面是他在教程中提到的三个源文件

__init.py__⬇️

代码语言:javascript
运行
复制
from flask import Flask

app = Flask(__name__)

from app import routes

routes.py⬇️

代码语言:javascript
运行
复制
from app import app

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!"

microblog.py⬇️

代码语言:javascript
运行
复制
from app import app

在设置源代码之后,我运行了export FLASK_APP=microblog.py,然后运行了flask run。在flask run上,您应该看到如下所示:

下面是我这一端的依赖版本:

票数 1
EN

Stack Overflow用户

发布于 2020-05-17 03:09:41

看起来flask (werkzeug模块)与python3.8 github issue不兼容,如果你使用的是werkzeug <0.15.5,请考虑降级到python3.7(并将虚拟环境中的python3链接指向python3.7)或者将你的werkzeug模块升级到0.15.5或更高版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56127413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档