Skip to main content
 首页 » 编程设计

python之uwsgi 和 django之django uwsgi 导入正在离开 virtualenv 并崩溃

2025年05月04日23sky-heaven

从 ini 文件启动 uwsgi 时崩溃,堆栈跟踪如下:

Traceback (most recent call last):                                                                                                                                                                                                                  
  File "/var/www/vhosts/x/projectX/wsgi.py", line 18, in <module>                                                                                                                                                                                   
    from django.core.wsgi import get_wsgi_application                                                                                                                                                                                               
  File "/var/www/vhosts/x/virtenv/local/lib/python2.7/site-packages/django/core/wsgi.py", line 1, in <module>                                                                                                                                       
    from django.core.handlers.wsgi import WSGIHandler                                                                                                                                                                                               
  File "/var/www/vhosts/x/virtenv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 4, in <module>                                                                                                                              
    import logging                                                                                                                                                                                                                                  
  File "/usr/lib64/python2.7/logging/__init__.py", line 26, in <module>                                                                                                                                                                             
    import sys, os, time, cStringIO, traceback, warnings, weakref                                                                                                                                                                                   
ImportError: No module named time    

路径/var/www/vhosts/x/virtenv/是正确的 virtualenv,它按预期使用 python 2.7。但是由于某些原因,在导入“logging”时,它会跳转到/usr/lib64/

这里还有两点要注意:

  1. 使用 -p 命令(手动指定/usr/bin/python2.7 作为 python 版本)并使用 --no-site-packages 设置 virtualenv
  2. 我们有几乎相同的 uwsgi.ini 文件与另一个 django 应用程序一起工作(没有问题)。唯一的区别似乎是这个项目 X 运行的是 Django 1.6.1 而另一个项目运行的是 Django 1.5

最奇怪的是,如果我尝试手动执行 wsgi.py 文件中的代码,它工作得很好。 (我获取 virtualenv,启动 python 命令行并在那里复制 wsgi.py 的命令)

这是 uwsgi.ini 文件:

[uwsgi] 
# variables 
projectname = projectX 
projectdomain = x.mydomain.com 
base = /var/www/vhosts/x 
 
# config 
socket = 127.0.0.1:8989 
chdir = %(base) 
wsgi-file = %(base)/%(projectname)/wsgi.py 
master = true 
pidfile = /tmp/%(projectname)-master.pid 
vacuum = true 
 
max-requests = 5000 
processes = 10 
#harakiri = 20 
uid = 109 
gid = 113 
 
callable = projectX 
 
env = DJANGO_SETTINGS_MODULE=settings 
home = %(base)/virtenv 
touch-reload = %(base) 
py-autoreload = 3 
 
#daemonize = /var/log/x/uwsgi.log 
virtualenv = %(base)/virtenv 
pythonpath = %(base)/virtenv/lib/python2.7 
pythonpath = %(base) 
pythonpath = %(base)/%(projectname) 

wsgi.py 文件:

import os 
 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectX.settings") 
 
from django.core.wsgi import get_wsgi_application    # <-- this is line 18 
application = get_wsgi_application() 

请您参考如下方法:

通过更改解决

env = DJANGO_SETTINGS_MODULE=settings 

到

env = DJANGO_SETTINGS_MODULE=projectX.settings 

如果有人知道为什么这适用于 django 1.5 而不是 1.6.1,我会非常感兴趣。