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

在cPanel共享主机部署Flask应用时因passenger_wsgi.py依赖已废弃的imp模块导致失败的解决方法咨询

在cPanel共享主机部署Flask应用时因passenger_wsgi.py依赖已废弃的imp模块导致失败的解决方法咨询

嘿,我之前在cPanel部署Flask的时候也碰到过一模一样的问题——自动生成的passenger_wsgi.py硬用了已经被Python移除的imp模块,手动修改后还会被自动覆盖,真的挺头疼的。给你几个亲测有效的解决思路:

方案一:自定义WSGI入口文件,避开自动生成覆盖

这是最稳妥的办法,步骤如下:

  1. 在你的Flask应用根目录下,手动创建一个新的WSGI文件,比如命名为custom_wsgi.py
  2. 把原来passenger_wsgi.py里的内容替换成importlib兼容的写法,示例代码如下:
import importlib.util

# 替换成你实际的Flask入口文件(比如app.py或者wsgi.py)
spec = importlib.util.spec_from_file_location('wsgi', 'app.py')
wsgi = importlib.util.module_from_spec(spec)
spec.loader.exec_module(wsgi)
# 替换成你Flask应用的实例名(通常是app或者application)
application = wsgi.app
  1. 打开cPanel里的「Setup Python App」工具,找到你正在部署的Flask应用,点击「Edit」进入编辑界面
  2. 在「WSGI Application file」字段里,把默认的passenger_wsgi.py改成你刚创建的custom_wsgi.py,保存设置
    这样cPanel就不会再自动生成覆盖这个文件,你的应用会使用自定义的兼容版WSGI文件启动。

方案二:联系主机服务商更新模板

如果你的主机服务商的cPanel Python应用模板还没更新到使用importlib,可以直接联系他们的技术支持,说明passenger_wsgi.py模板里的imp模块在高版本Python中已被移除,请求他们更新模板代码。很多服务商都会及时处理这类兼容性问题。

方案三:临时兼容层(不推荐作为长期方案)

如果以上两种方法暂时无法实施,可以尝试在你的Flask入口文件(比如app.py)顶部添加一个兼容层,临时模拟imp模块的功能:

try:
    import imp
except ImportError:
    import importlib.util

    class ImpCompatibility:
        @staticmethod
        def load_source(module_name, file_path):
            spec = importlib.util.spec_from_file_location(module_name, file_path)
            module = importlib.util.module_from_spec(spec)
            spec.loader.exec_module(module)
            return module

    imp = ImpCompatibility()

这个方法只是临时绕开错误,可能会有潜在的兼容性问题,所以优先推荐前两个方案。

备注:内容来源于stack exchange,提问作者macloo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:08:17