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

uWSGI搭配Python venv运行Django报错No module named 'django'

问题核心原因

报错本质是全局安装的uWSGI编译时绑定了系统Python3.5解释器,和你用Python3.7创建的fisrtsite虚拟环境二进制ABI不兼容,这种情况下就算加了-H参数指定虚拟环境路径,uWSGI也没法正常加载3.7环境下安装的Django包,和虚拟环境本身有没有装Django没有直接关系。

解决方法
  • 方案1(最适配多项目管理需求,推荐)
    不要用单个全局uWSGI适配所有项目,直接在对应Python版本的虚拟环境内安装匹配的uWSGI,从根源避免版本串扰:
    1. 激活Python3.7创建的虚拟环境:
      source /home/mo/fisrtsite/bin/activate
      
    2. 在激活的虚拟环境内安装uWSGI,安装后的二进制会自动绑定当前环境的Python3.7解释器:
      pip install uwsgi
      
    3. 启动时直接调用虚拟环境内的uWSGI二进制即可,示例启动命令:
      /home/mo/fisrtsite/bin/uwsgi --http :8080 --chdir /home/mo/sitefirst --home /home/mo/fisrtsite --module sitefirst.wsgi
      
    这种方式每个项目用自己环境内的uWSGI,不管其他项目用什么Python版本、装什么依赖,都不会互相影响,比全局单uWSGI适配所有版本的维护成本低很多。
  • 方案2(坚持使用全局uWSGI的处理方式)
    卸载原来绑定Python3.5的uWSGI,重新编译安装绑定Python3.7的全局版本:
    1. 卸载原有全局uWSGI:
      sudo -H pip3 uninstall uwsgi
      
    2. 确认系统内Python3.7的路径,Ubuntu默认安装路径一般为/usr/bin/python3.7,可以用which python3.7命令核验
    3. 调用Python3.7的pip重新全局安装uWSGI,安装过程会自动适配3.7版本的解释器:
      sudo -H /usr/bin/python3.7 -m pip install uwsgi
      
    4. 安装完成后执行uwsgi --python-version,确认输出为3.7.x,再用原来的启动命令即可正常加载虚拟环境内的Django。

排查提醒:注意你记录的虚拟环境名拼写为fisrtsite(存在字母顺序笔误),启动前先执行ls /home/mo/fisrtsite/bin/activate确认虚拟环境路径真实存在,路径拼写错误也会导致虚拟环境加载失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:18:21