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

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模块:

    1. 在Dockerfile中先安装编译依赖(如gcc、make、libpython3.11-dev等)
    2. 下载对应版本的Nginx Unit源码,编译时指定Python 3.11.7的路径
    3. 构建完成后,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

  • 检查依赖安装路径一致性

    1. 在容器中执行pip show django,查看Django的安装路径(比如/usr/local/lib/python3.11/site-packages)
    2. 找到Nginx Unit使用的Python解释器路径,执行/path/to/unit-python -c "import sys; print(sys.path)",确认输出的路径包含Django的安装目录
    3. 如果不包含,可以手动添加路径到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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:55:14