ImportError: No module named django.core.wsgi for uwsgi

前端 未结 6 2419
Happy的楠姐
Happy的楠姐 2020-12-09 02:55

I\'m using uwsgi for my Django(version =1.4) project, but there\'s an error if I run

uwsgi --ini django.ini
from django.core.wsgi impor         


        
6条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-09 03:59

    The error ImportError: No module named django.core.wsgi generally arises when uwsgi tries reading the wsgi.py file, and comes to the line:

    from django.core.wsgi import get_wsgi_application
    

    It can't find this these modules because Django is not installed, or if it is installed, it is not in PYTHONPATH.

    If your project is in a virtualenv and Django is only installed in this virtualenv, somehow the path to the Django modules are not in the PYTHONPATH, and thus Python can't find it.

    If you are curious, you can insert the following code into the wsgi.py file, and see the PYTHONPATH:

    import os
    print '===== sys.path / PYTHONPATH ====='
    for k in sorted(os.environ.keys()):
        v = os.environ[k]
        print ('%-30s %s' % (k,v[:70]))
    

    If you run a local version of uwsgi, installed in the virtualenv, then the path will be set correct, but if you run a global version of uwsgi it will normally not have the PYTHONPATH set correctly.

    You can tell uWSGI the path to the virtualenv, and it will figure out the correct PYTHONPATH. Just use the --virtualenv command line argument, eg:

    uwsgi --http :8001 --module wsgi --virtualenv /home/jdoe/myvirtualenv
    

    (The following arguments does exactly the same as --virtualenv: --venv, --home, -H)

    Surprisingly, setting $VIRTUAL_ENV has no effect on PYTHONPATH

    Strangely enough, if you don't use the --virtualenv argument, the environment variable $VIRTUAL_ENV will be set correctly. Test this by inserting into wsgi.py:

    print os.environ['VIRTUAL_ENV']
    

    This will print:

    /home/jdoe/myvirtualenv
    

    But the PYTHONPATH is not set correctly, and does not include anything from the virtualenv.

    I can't explain why this is.

提交回复
热议问题