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

Windows环境下Flask+Apache部署出现'module' object is not callable错误求助

Windows下Apache部署Flask应用报错:TypeError: 'module' object is not callable

问题背景

近期在Windows系统中搭建Apache服务器部署Flask应用,部署步骤如下:

  • 通过Apache Lounge下载Apache并解压至C:\Apache24;
  • 在Python 3.7.7虚拟环境中安装mod_wsgi;
  • 将mod_wsgi配置添加至httpd.conf文件;
  • 在Apache的conf目录中创建应用配置文件。

Apache的error.log中出现如下错误:

[Fri Nov 11 18:44:00.985814 2022] [wsgi:error] [pid 9456:tid 1396] [client 127.0.0.1:58152] mod_wsgi (pid=9456): Exception occurred processing WSGI script 'J:/tools/pipecrew/ashish/workspace/tools/wsgi_scripts/shotgrid_ami_handler.wsgi'.
[Fri Nov 11 18:44:00.985814 2022] [wsgi:error] [pid 9456:tid 1396] [client 127.0.0.1:58152] TypeError: 'module' object is not callable
[Fri Nov 11 18:44:01.020776 2022] [wsgi:error] [pid 9456:tid 1392] [client 127.0.0.1:58153] mod_wsgi (pid=9456): Exception occurred processing WSGI script 'J:/tools/pipecrew/ashish/workspace/tools/wsgi_scripts/shotgrid_ami_handler.wsgi'., referer: http://fpservices.in/boom
[Fri Nov 11 18:44:01.020776 2022] [wsgi:error] [pid 9456:tid 1392] [client 127.0.0.1:58153] TypeError: 'module' object is not callable, referer: http://fpservices.in/boom

相关配置片段

1. Apache httpd.conf配置

LoadFile "J:/tools/rez_packages/python/3.7.7/platform-windows/python37.dll"
LoadModule wsgi_module "D:/virtual_python/python-3/mod_wsgi/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "D:/virtual_python/python-3/mod_wsgi"

# Include Flask File
Include conf/shotgrid_ami_handler.conf

2. Flask应用配置文件(conf/shotgrid_ami_handler.conf)

<VirtualHost *:80>
    ServerName fpservices.in
    WSGIScriptAlias / J:/tools/pipecrew/ashish/workspace/tools/wsgi_scripts/shotgrid_ami_handler.wsgi
    <Directory J:/tools/pipecrew/ashish/workspace/tools/shotgrid_ami_handler>
        WSGIScriptReloading On
        Require all granted
    </Directory>
</VirtualHost>

3. WSGI文件(shotgrid_ami_handler.wsgi)

import sys

sys.path.insert(0, 'J:\\tools\\pipecrew\\ashish\\workspace\\tools')

from shotgrid_ami_handler import app as application

4. Flask应用代码(shotgrid_ami_handler.py)

from flask import Flask, request, Response

app = Flask(__name__)

@app.route('/boom', methods=['GET', 'POST'])
def boom():
    return 'boom!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=4576, debug=True)

错误原因与解决方法

核心问题

TypeError: 'module' object is not callable的本质是:mod_wsgi期望application是可调用的WSGI应用对象(即Flask的app实例),但当前导入的app实际是一个模块而非Flask实例。

触发原因

WSGI文件中sys.path添加的路径是J:\\tools\\pipecrew\\ashish\\workspace\\tools,而Flask应用代码所在目录是J:\\tools\\pipecrew\\ashish\\workspace\\tools\\shotgrid_ami_handler。执行from shotgrid_ami_handler import app时,Python将shotgrid_ami_handler识别为tools目录下的模块(可能存在同名文件夹或文件导入优先级问题),而非实际的Flask应用模块。

修复步骤

  1. 调整WSGI文件的路径导入
    修改WSGI文件,将sys.path指向Flask应用所在的父目录,确保正确导入Flask实例:

    import sys
    
    # 指向包含Flask应用文件/目录的路径
    sys.path.insert(0, 'J:\\tools\\pipecrew\\ashish\\workspace\\tools\\shotgrid_ami_handler')
    
    from shotgrid_ami_handler import app as application
    

    若Flask应用代码直接在tools目录下的shotgrid_ami_handler.py文件中,需检查tools目录下是否有同名的shotgrid_ami_handler文件夹,避免Python优先导入文件夹作为模块。

  2. 验证导入有效性
    可在WSGI文件中添加调试代码,确认导入内容:

    import sys
    sys.path.insert(0, 'J:\\tools\\pipecrew\\ashish\\workspace\\tools')
    
    import shotgrid_ami_handler
    print(type(shotgrid_ami_handler))  # 若输出<class 'module'>,说明导入的是模块而非实例
    print(dir(shotgrid_ami_handler))  # 查看模块成员,确认是否存在app属性
    

    执行后查看Apache的error.log,确认导入内容是否符合预期。

  3. 规范目录结构
    确保文件目录结构清晰,避免同名冲突:

    J:\tools\pipecrew\ashish\workspace\tools\
    ├── wsgi_scripts\
    │   └── shotgrid_ami_handler.wsgi
    └── shotgrid_ami_handler\
        └── shotgrid_ami_handler.py  # 包含Flask app实例的文件
    

    或单文件结构:

    J:\tools\pipecrew\ashish\workspace\tools\
    ├── wsgi_scripts\
    │   └── shotgrid_ami_handler.wsgi
    └── shotgrid_ami_handler.py  # 包含Flask app实例的文件
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:25:23