Ứng dụng Flask sẽ không khởi chạy 'ImportError: không thể nhập tên' cacheed_property 'từ' werkzeug ''


11

Tôi đã làm việc trên một ứng dụng Flask được vài tuần. Tôi đã hoàn thành nó ngày hôm nay và đi triển khai nó ... và bây giờ nó sẽ không khởi chạy.

Tôi chưa thêm hoặc xóa bất kỳ mã nào để giả sử có gì đó đã thay đổi trong quá trình triển khai?

Dù sao, đây là lỗi đầy đủ được hiển thị trong thiết bị đầu cuối:

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)

Ngoài ra đây là mã trong ba tập tin được đề cập.

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)")])

Tôi đã thử cài đặt lại flask& flask_restplusnhưng không may mắn.


2
Có vẻ như Werkzeug 1.0.0 đã được phát hành, điều này đã gây ra lỗi này ở nơi khác. Tuy nhiên Flask-Restplus cũng không rõ ràng . Bạn có thể xem xét chuyển đến flask-restxhoặc có thể thử ghim Werkzeug==0.16.1theo yêu cầu của bạn.
v25

Trong python 3,8 bạn có thểfrom functools import cached_property
Martin Thoma

Câu trả lời:


9

Thử:

from werkzeug.utils import cached_property

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



1
vấn đề kiểm tra bình: github.com/jarus/flask-testing/issues/143
Ri1a

Xin nhớ rằng jar_restplus được coi là đã chết: github.com/noirbizarre/flask-restplus/issues/770
Pitto

Nếu bất cứ ai gặp vấn đề này với Robobrowser, hãy thêm nó lên trên dòng 'từ robobrowser nhập RoboBrowser' và thêm 'nhập werkzeug'
sokoine

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.