Nginx Unit部署Docker化Django项目时wsgi.py模块导入失败
解决方案:Nginx Unit无法导入Django模块的问题
你的问题核心是Nginx Unit使用的Python版本(3.11.2)与容器系统的Python版本(3.11.7)不匹配,导致Unit无法找到安装在3.11.7环境里的Django依赖。以下是具体解决步骤:
统一Python版本(推荐方案)
容器化场景下,最彻底的解决方式是让Nginx Unit使用与系统一致的Python版本。可以基于python:3.11.7-slim基础镜像,自行编译Nginx Unit的Python模块:- 在Dockerfile中先安装编译依赖(如gcc、make、libpython3.11-dev等)
- 下载对应版本的Nginx Unit源码,编译时指定Python 3.11.7的路径
- 构建完成后,Unit的Python模块会和系统Python版本完全匹配,依赖环境也能统一
显式指定Python解释器与虚拟环境
如果不想重新编译Unit,可以在Unit的配置文件中明确指定容器中3.11.7版本的Python解释器路径,以及项目的虚拟环境路径(如果使用了虚拟环境)。示例配置:{ "listeners": { "*:8000": { "pass": "applications/myapp" } }, "applications": { "myapp": { "type": "python 3.11", "path": "/opt/myapp", "module": "myapp.wsgi", "python": "/usr/local/bin/python3.11", "virtualenv": "/opt/myapp/venv" } } }推送配置后,重启Unit服务:
unitctl reload检查依赖安装路径一致性
- 在容器中执行
pip show django,查看Django的安装路径(比如/usr/local/lib/python3.11/site-packages) - 找到Nginx Unit使用的Python解释器路径,执行
/path/to/unit-python -c "import sys; print(sys.path)",确认输出的路径包含Django的安装目录 - 如果不包含,可以手动添加路径到Unit的配置中,或者将依赖重新安装到Unit的Python环境里
- 在容器中执行
验证Unit的Python环境
直接用Unit的Python解释器检查依赖:# 找到Unit的Python解释器(通常在/usr/libexec/unit/modules/python3.11/或类似路径) /usr/libexec/unit/modules/python3.11/python -m pip list如果输出中没有Django,就用这个解释器安装依赖:
/usr/libexec/unit/modules/python3.11/python -m pip install -r requirements.txt
内容的提问来源于stack exchange,提问作者Lucifer N.
相关产品推荐
相关产品推荐

