You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移后Flask服务每日因werkzeug.utils缺失崩溃求助

问题描述

我有一个基于Flask和Werkzeug的服务,近期从Linux服务器迁移到Python服务器后,服务每天都会崩溃。卸载重装Werkzeug能暂时恢复,但一天后日志又会出现werkzeug.utils相关的ModuleNotFoundError。

错误日志

App 2048818 output: /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.py:26: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
App 2048818 output:   import sys, os, re, imp, threading, signal, traceback, socket, select, struct, logging, errno
App 2048818 output: Traceback (most recent call last):
App 2048818 output:   File "/opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.py", line 369, in <module>
App 2048818 output:     
App 2048818 output: app_module = load_app()
App 2048818 output:   File "/opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.py", line 76, in load_app
App 2048818 output:     
App 2048818 output: return imp.load_source('passenger_wsgi', startup_file)
App 2048818 output:   File "/opt/alt/python38/lib64/python3.8/imp.py", line 171, in load_source
App 2048818 output:     
App 2048818 output: module = _load(spec)
App 2048818 output:   File "<frozen importlib._bootstrap>", line 702, in _load
App 2048818 output:   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
App 2048818 output:   File "<frozen importlib._bootstrap_external>", line 843, in exec_module
App 2048818 output:   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
App 2048818 output:   File "/home/inbotioc/public_html/sitemap-checker/passenger_wsgi.py", line 8, in <module>
App 2048818 output:     
App 2048818 output: wsgi = imp.load_source('wsgi', 'sitemap-checker-pycode.py')
App 2048818 output:   File "/opt/alt/python38/lib64/python3.8/imp.py", line 171, in load_source
App 2048818 output:     
App 2048818 output: module = _load(spec)
App 2048818 output:   File "<frozen importlib._bootstrap>", line 702, in _load
App 2048818 output:   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
App 2048818 output:   File "<frozen importlib._bootstrap_external>", line 843, in exec_module
App 2048818 output:   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
App 2048818 output:   File "sitemap-checker-pycode.py", line 5, in <module>
App 2048818 output:     
App 2048818 output: from flask import Flask, request
App 2048818 output:   File "/home/inbotioc/virtualenv/public_html/sitemap-checker/3.8/lib/python3.8/site-packages/flask/__init__.py", line 5, in <module>
App 2048818 output:     
App 2048818 output: from . import json as json
App 2048818 output:   File "/home/inbotioc/virtualenv/public_html/sitemap-checker/3.8/lib/python3.8/site-packages/flask/json/__init__.py", line 6, in <module>
App 2048818 output:     
App 2048818 output: from ..globals import current_app
App 2048818 output:   File "/home/inbotioc/virtualenv/public_html/sitemap-checker/3.8/lib/python3.8/site-packages/flask/globals.py", line 6, in <module>
App 2048818 output:     
App 2048818 output: from werkzeug.local import LocalProxy
App 2048818 output:   File "/home/inbotioc/virtualenv/public_html/sitemap-checker/3.8/lib/python3.8/site-packages/werkzeug/__init__.py", line 6, in <module>
App 2048818 output:     
App 2048818 output: from .test import Client as Client
App 2048818 output:   File "/home/inbotioc/virtualenv/public_html/sitemap-checker/3.8/lib/python3.8/site-packages/werkzeug/test.py", line 41, in <module>
App 2048818 output:     
App 2048818 output: from .utils import cached_property
App 2048818 output: ModuleNotFoundError: 
App 2048818 output: No module named 'werkzeug.utils'

已安装包列表

blinker==1.6.2
cachelib==0.10.2
certifi==2023.7.22
charset-normalizer==3.2.0
click==8.1.7
elementpath==4.1.5
exceptiongroup==1.1.3
Flask==3.0.0
Flask-Session==0.5.0
idna==3.4
importlib-metadata==6.8.0
iniconfig==2.0.0
itsdangerous==2.1.2
Jinja2==3.1.2
lxml==4.9.3
MarkupSafe==2.1.3
packaging==23.2
pluggy==1.3.0
pytest==7.4.2
requests==2.31.0
tomli==2.0.1
urllib3==2.0.5
Werkzeug==3.0.1
xmlschema==2.5.0
zipp==3.17.0
解决方案
  • 锁定依赖版本并强制重装
    在requirements.txt中固定Flask和Werkzeug的版本:

    Flask==3.0.0
    Werkzeug==3.0.1
    

    执行命令强制重新安装所有依赖,确保没有损坏的文件:

    pip install -r requirements.txt --force-reinstall
    
  • 修正虚拟环境加载路径
    在passenger_wsgi.py开头添加虚拟环境的包路径,确保加载器使用正确的依赖:

    import sys
    sys.path.insert(0, '/home/inbotioc/virtualenv/public_html/sitemap-checker/3.8/lib/python3.8/site-packages')
    
  • 替换废弃的imp模块加载方式
    日志提示imp模块已废弃,修改passenger_wsgi.py中的代码,用importlib替代imp.load_source:

    import importlib.util
    spec = importlib.util.spec_from_file_location('wsgi', 'sitemap-checker-pycode.py')
    wsgi = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(wsgi)
    
  • 检查服务器自动清理机制
    排查服务器是否存在定时清理脚本,确认虚拟环境目录/home/inbotioc/virtualenv/public_html/sitemap-checker/3.8/lib/python3.8/site-packages/werkzeug的文件权限,确保服务进程有读写权限,避免文件被意外删除。

内容的提问来源于stack exchange,提问作者Keivan Ghazalbash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:05:56