我正在处理我相当确定是版本控制错误的问题。
我正在运行一个
flask
(2.2.3) 应用程序,它使用 flask-caching
(2.0.1) 在 Redis 上缓存数据。我已将 werkzeug
的版本固定到 2.2.2,这是 flask-caching
和 flask
的依赖项。
每当它
flask-caching
收到缓存命中并尝试从Redis中提取时,我都会收到以下错误:
No module named 'werkzeug.datastructures.headers'; 'werkzeug.datastructures' is not a package
当底层包
cachelib
尝试对flask-caching
中存储的Redis数据集进行反序列化(第94行)时,就会发生这种情况。
腌制的绳子是这样的
b'!\x80\x05\x95\x17\x01\x00\x00\x00\x00\x00\x00\x8c\x0eflask.wrappers\x94\x8c\x08Response\x94\x93\x94)\x81\x94}\x94(\x8c\x08_charset\x94\x8c\x05utf-8\x94\x8c\x07headers\x94\x8c\x1fwerkzeug.datastructures.headers\x94\x8c\x07Headers\x94\x93\x94)\x81\x94}\x94\x8c\x05_list\x94]\x94(\x8c\x0cContent-Type\x94\x8c\x10application/json\x94\x86\x94\x8c\x0eContent-Length\x94\x8c\x06429482\x94\x86\x94esb\x8c\x07_status\x94\x8c\x06200 OK\x94\x8c\x0c_status_code\x94K\xc8\x8c\x12direct_passthrough\x94\x89\x8c\t_on_close\x94]\x94\x8c\x08response\x94]\x94B\xaa\x8d\x06\x00{"categories":[{"is_selected":true,"key":"points","label_long":"points","label_short":"pts","multiplier":1,"punted":false,"selectable":true,"type_":"standard"},{"is_selected":true,"key":"rebounds","label_long":"rebounds","label_short":"reb","multiplier":1,"punted":false,"selectable":true,"type_":"standard"},{"is_selected":true,"key":"assists","label_long":"assists","label_short":"ast","multiplier":1,"punted":false,"selectable":true,"type_":"standard"},{"is_...
如果仔细观察,
werkzeug.datastructures.headers
包含在该字符串中,它会尝试反序列化,这会导致错误。
有谁知道为什么会发生这种情况以及如何解决它?
我仍然不知道是什么导致了这个问题,但是使用
cache.clear()
手动清除缓存数据似乎已经阻止了它的发生。