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

如何在Heroku中运行mitmproxy?部署后遇mitmproxy.tools模块缺失报错

mitmproxy在Heroku部署时ModuleNotFoundError问题解决

环境信息

  • Python版本:3.11.0
  • mitmproxy版本:10.2.0
  • 安装mitmproxy时附带的依赖:
    mitmproxy-macos==0.5.1
    mitmproxy_rs==0.5.1
    urwid-mitmproxy==2.1.2.1
    

问题描述

本地环境运行正常,但部署到Heroku后执行subprocess.Popen(['mitmdump', '-s', 'filepath'])时触发报错:

Traceback (most recent call last):
  File "/app/.heroku/python/bin/mitmdump", line 5, in <module>
     from mitmproxy.tools.main import mitmdump 
ModuleNotFoundError: No module name 'mitmproxy.tools'

Heroku构建日志显示对应版本的包已正确安装。

解决步骤

  1. 改用Python模块方式调用mitmdump
    直接调用mitmdump可能因Heroku的路径隔离问题找不到模块,换成Python -m参数调用,确保使用当前环境的mitmproxy:

    subprocess.Popen(['python', '-m', 'mitmproxy.tools.mitmdump', '-s', 'filepath'])
    
  2. 清理平台专属依赖
    mitmproxy-macos是macOS专用依赖,Heroku使用Linux环境,无需安装。修改requirements.txt移除该依赖,确保内容如下:

    mitmproxy==10.2.0
    mitmproxy_rs==0.5.1
    urwid-mitmproxy==2.1.2.1
    

    重新部署应用,避免不必要的依赖冲突。

  3. 验证mitmproxy安装状态
    在Heroku dyno中执行以下命令,确认mitmproxy模块是否正常存在:

    heroku run python -c "import mitmproxy.tools; print(mitmproxy.tools.__file__)"
    

    如果执行失败,说明安装不完整,可尝试删除requirements.txt.lock后重新部署。

  4. 显式指定subprocess的环境变量
    若PATH或PYTHONPATH异常,可在调用subprocess时手动设置环境变量:

    import os
    import subprocess
    
    env = os.environ.copy()
    env['PYTHONPATH'] = '/app/.heroku/python/lib/python3.11/site-packages'
    subprocess.Popen(['mitmdump', '-s', 'filepath'], env=env)
    
  5. 确认使用官方Python buildpack
    确保应用使用Heroku官方Python buildpack,避免第三方buildpack导致的环境问题:

    heroku buildpacks:set heroku/python
    

    重新部署应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:37:35