Устранение неполадок с ошибкой Flask при маршрутизации werkzeug - PullRequest
0 голосов
/ 14 мая 2019

Я следую учебному пособию по созданию самого простого приложения Flask «Hello World», как описано в: 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

Когда я запускаю команду "работа с колбой", сценарий верхнего уровняrun (содержимое здесь)

from app import 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.Чтобы решить эту проблему, попробуйте добавить пути Anaconda в bash_profile к переменной PATH в windows

Happy Flasking:)!

1 Ответ

1 голос
/ 14 мая 2019

Я получил сервер и работает.Вот структура проекта, которая у меня есть:

.
├── 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 вы должны увидеть что-то вроде этого:

enter image description here

Вот версии зависимостей на моем конце:

enter image description here

...