【问题标题】:Troubleshooting Flask error werkzeug routingFlask 错误 werkzeug 路由故障排除
【发布时间】:2019-10-01 07:16:54
【问题描述】:

我正在按照教程做最简单的“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版本

$ python -m venv venv
$ venv\Scripts\activate
(venv) $ pip install flask

同时设置 FLASK_APP 环境变量

(venv) $ set FLASK_APP=microblog.py

当我发出“烧瓶运行”命令时,顶级脚本运行(内容在这里)

from app import app

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

from flask import Flask

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

from app import routes

第二行失败,错误输出如下:

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 Prompt 运行。要解决此类问题,请尝试将 bash_profile 中的 Anaconda 路径添加到 windows 中的 PATH 变量中

烧瓶快乐:)!

【问题讨论】:

  • 您是否按照教程运行了set FLASK_APP=microblog.py
  • 嗨,扎克,是的。当我不这样做时,我得到一个不同的错误,它找不到文件。我编辑了问题以表示感谢。

标签: python python-3.x flask werkzeug


【解决方案1】:

看起来flask(werkzeug模块)与python3.8不兼容github issue如果您使用werkzeug

【讨论】:

  • Werkzeug 在 0.15.5 版本上修复了这个问题
【解决方案2】:

我启动并运行了服务器。这是我的项目结构:

.
├── app
│   ├── __init__.py
│   └── routes.py
├── microblog.py
└── venv

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

__init.py__⬇️

from flask import Flask

app = Flask(__name__)

from app import routes

routes.py⬇️

from app import app

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

microblog.py⬇️

from app import app

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

这是我这边的依赖版本:

【讨论】:

  • 你在venv中运行的是什么版本的flask?我的设置和你一样,但还是没有运气:(
  • 除了 pip (19.0.3) 之外我也有同样的情况——可能是 windows 的问题。稍后我会在 Mac 上尝试一下
  • 已修复 :) 我还必须更改我的 PATH 环境变量!感谢扎克的帮助!
  • np!很高兴提供帮助:)
  • 您好 Ernesto,您能否提供更多关于您如何解决问题的信息?
猜你喜欢
  • 2020-01-08
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
相关资源
最近更新 更多