如何在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构建日志显示对应版本的包已正确安装。
解决步骤
改用Python模块方式调用mitmdump
直接调用mitmdump可能因Heroku的路径隔离问题找不到模块,换成Python-m参数调用,确保使用当前环境的mitmproxy:subprocess.Popen(['python', '-m', 'mitmproxy.tools.mitmdump', '-s', 'filepath'])清理平台专属依赖
mitmproxy-macos是macOS专用依赖,Heroku使用Linux环境,无需安装。修改requirements.txt移除该依赖,确保内容如下:mitmproxy==10.2.0 mitmproxy_rs==0.5.1 urwid-mitmproxy==2.1.2.1重新部署应用,避免不必要的依赖冲突。
验证mitmproxy安装状态
在Heroku dyno中执行以下命令,确认mitmproxy模块是否正常存在:heroku run python -c "import mitmproxy.tools; print(mitmproxy.tools.__file__)"如果执行失败,说明安装不完整,可尝试删除
requirements.txt.lock后重新部署。显式指定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)确认使用官方Python buildpack
确保应用使用Heroku官方Python buildpack,避免第三方buildpack导致的环境问题:heroku buildpacks:set heroku/python重新部署应用。
内容的提问来源于stack exchange,提问作者Bad Coder
相关产品推荐
相关产品推荐

