แอพ Flask จะไม่เรียกใช้ 'ImportError: ไม่สามารถนำเข้าชื่อ' cached_property 'จาก' werkzeug ''


11

ฉันทำงานกับแอพ Flask มาหลายสัปดาห์แล้ว ฉันเสร็จแล้ววันนี้และไปปรับใช้ ... และตอนนี้จะไม่เปิดตัว

ฉันไม่ได้เพิ่มหรือลบรหัสใด ๆ ดังนั้นจึงมีบางอย่างเปลี่ยนแปลงไปในกระบวนการปรับใช้ใช่หรือไม่

อย่างไรก็ตามนี่คือข้อผิดพลาดเต็มรูปแบบที่ปรากฏใน terminal:

Traceback (most recent call last):
  File "C:\Users\Kev\Documents\Projects\Docket\manage.py", line 5, in <module>
    from app import create_app, db
  File "C:\Users\Kev\Documents\Projects\Docket\app\__init__.py", line 21, in <module>
    from app.api import api, blueprint, limiter
  File "C:\Users\Kev\Documents\Projects\Docket\app\api\__init__.py", line 2, in <module>
    from flask_restplus import Api
  File "C:\Users\Kev\.virtualenvs\Docket-LasDxOWU\lib\site-packages\flask_restplus\__init_
_.py", line 4, in <module>
    from . import fields, reqparse, apidoc, inputs, cors
  File "C:\Users\Kev\.virtualenvs\Docket-LasDxOWU\lib\site-packages\flask_restplus\fields.
py", line 17, in <module>
    from werkzeug import cached_property
ImportError: cannot import name 'cached_property' from 'werkzeug' (C:\Users\Kev\.virtualen
vs\Docket-LasDxOWU\lib\site-packages\werkzeug\__init__.py)

นี่คือรหัสในสามไฟล์ที่กล่าวถึง

manage.py:

from apscheduler.schedulers.background import BackgroundScheduler
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand

from app import create_app, db

app = create_app()
app.app_context().push()

manager = Manager(app)

migrate = Migrate(app, db)

manager.add_command('db', MigrateCommand)

from app.routes import *
from app.models import *

def clear_data():
    with app.app_context():
        db.session.query(User).delete()
        db.session.query(Todo).delete()
        db.session.commit()
        print("Deleted table rows!")

@manager.command
def run():
    scheduler = BackgroundScheduler()
    scheduler.add_job(clear_data, trigger='interval', minutes=15)
    scheduler.start()
    app.run(debug=True)

if __name__ == '__main__':
    clear_data()
    manager.run()

app/__init__.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager

from config import Config

db = SQLAlchemy()

login = LoginManager()

def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)
    db.init_app(app)

    login.init_app(app)
    login.login_view = 'login'

    from app.api import api, blueprint, limiter
    from app.api.endpoints import users, todos, register
    from app.api.endpoints.todos import TodosNS
    from app.api.endpoints.users import UserNS
    from app.api.endpoints.register import RegisterNS

    api.init_app(app)

    app.register_blueprint(blueprint)

    limiter.init_app(app)

    api.add_namespace(TodosNS)
    api.add_namespace(UserNS)
    api.add_namespace(RegisterNS)

    return app

api/__init__.py:

from logging import StreamHandler
from flask_restplus import Api
from flask import Blueprint
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

blueprint = Blueprint('api', __name__, url_prefix='/api')

limiter = Limiter(key_func=get_remote_address)
limiter.logger.addHandler(StreamHandler())

api = Api(blueprint, doc='/documentation', version='1.0', title='Docket API',
          description='API for Docket. Create users and todo items through a REST API.\n'
                      'First of all, begin by registering a new user via the registration form in the web interface.\n'
                      'Or via a `POST` request to the `/Register/` end point', decorators=[limiter.limit("50/day", error_message="API request limit has been reached (50 per day)")])

ฉันได้พยายามติดตั้งflaskและflask_restplusแต่ไม่มีโชค


2
ดูเหมือนว่า Werkzeug 1.0.0 วางจำหน่ายแล้วซึ่งทำให้เกิดข้อผิดพลาดนี้ที่อื่น แต่ขวด-Restplus ยังเป็นunmaintained คุณอาจพิจารณาย้ายไปที่flask-restxหรืออาจลองปักหมุดWerkzeug==0.16.1ในความต้องการของคุณ
v25

ใน python 3.8 คุณสามารถfrom functools import cached_property
Martin Thoma

คำตอบ:


9

ลอง:

from werkzeug.utils import cached_property

https://werkzeug.palletsprojects.com/en/1.0.x/utils/



1
ปัญหาการทดสอบขวด: github.com/jarus/flask-testing/issues/143
Ri1a

โปรดจำไว้ว่า flask_restplus ถือว่าตายแล้ว: github.com/noirbizarre/flask-restplus/issues/770
Pitto

หากใครมีปัญหาเกี่ยวกับ Robobrowser ให้เพิ่มมันเหนือบรรทัด 'จาก robobrowser นำเข้า RoboBrowser' และเพิ่ม 'import werkzeug'
sokoine

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.