M1芯片macOS Monterey下brew安装的uWSGI无法加载Flask应用
故障原因排查及解决方法
核心根因
- M1芯片机型升级macOS Monterey后,Homebrew源提供的uWSGI安装包默认不再内置Python WSGI请求处理插件,和此前Big Sur版本的编译配置不同。日志中
no request plugin is loaded的警告直接说明问题:没有Python插件的情况下uWSGI无法识别Python应用入口,因此出现no app loaded的报错,无法加载你配置的main:app应用。 - pip安装uWSGI报错是因为Monterey对系统级头文件、依赖库的权限做了收紧,且M1架构的Homebrew依赖路径和之前x86架构不同,编译时无法自动找到openssl、zlib等依赖库。
解决方法
方法1:brew安装版本追加Python插件配置
首先确认uWSGI的Python插件已随brew安装包一同部署,M1机型的插件默认路径为/opt/homebrew/Cellar/uwsgi/<你的uWSGI版本号>/lib/uwsgi/,找到对应你使用Python版本的插件文件,命名一般为python3<小版本号>_plugin.so。
修改uwsgi.ini配置,追加插件加载配置即可:
[uwsgi] plugin = python3 module = main:app master = true http-socket = :8081 processes = 4
也可以直接在启动命令中指定插件:uwsgi --plugin python3 --ini uwsgi.ini。
方法2:修复pip安装uWSGI的报错后使用pip版本
pip安装的uWSGI会和当前激活的Python环境绑定,默认内置对应版本的Python插件,适配性更好,按照以下步骤解决pip安装报错:
- 先安装系统编译依赖:
xcode-select --install - 安装uWSGI编译所需的第三方依赖:
brew install openssl zlib - 临时设置编译环境变量后执行安装:
export CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix zlib)/include" export LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix zlib)/lib" pip install uwsgi
验证注意事项
启动后确认日志中无no request plugin is loaded警告,且出现WSGI app 0 (mountpoint='') ready in ... seconds on interpreter ...类日志即为加载成功。需注意运行uWSGI的Python环境要和项目依赖的Python环境保持一致,避免出现找不到Flask、routing模块的问题。
内容的提问来源于stack exchange,提问作者Saee Saadat
相关产品推荐
相关产品推荐

