title: uwsgi + django + nginx: Python application not loading
body: <p>Following a bunch of tutorials, I wrote my first django app and then decided to deploy it on a linode server. Following <a href="https://www.linode.com/docs/web-servers/nginx/deploy-django-applications-using-uwsgi-and-nginx-on-ubuntu-14-04" rel="nofollow noreferrer">their tutorial</a>, I only got so far. The best I could tell, that was based on an earlier version of Ubunto and I tried some other things, including the uwsgi quickstart tutorial.</p>
  
  <p>I got far enough that the command 'python manage.py runserver' would serve up my site and wanted to move on to using uwsgi to do the same.</p>
  
  <p>It seems as though there is some environment variable missing. When I try to start uwsgi from the command line with:</p>
  
  <pre><code>uwsgi --http :8000 --module dynamicefl.wsgi
  </code></pre>
  
  <p>I get the following:</p>
  
  <pre><code>*** Starting uWSGI 2.0.15 (64bit) on [Fri Aug 11 19:37:04 2017] ***
  compiled with version: 6.3.0 20170406 on 10 August 2017 23:41:13
  os: Linux-4.9.36-x86_64-linode85 #1 SMP Thu Jul 6 15:31:23 UTC 2017
  nodename: roosevelt
  machine: x86_64
  clock source: unix
  detected number of CPU cores: 1
  current working directory: /home/django/worksheets/dynamic-efl
  detected binary path: /usr/local/bin/uwsgi
  !!! no internal routing support, rebuild with pcre support !!!
  *** WARNING: you are running uWSGI without its master process manager ***
  your processes number limit is 3941
  your memory page size is 4096 bytes
  detected max file descriptor number: 1024
  lock engine: pthread robust mutexes
  thunder lock: disabled (you can enable it with --thunder-lock)
  uWSGI http bound on :8000 fd 4
  spawned uWSGI http 1 (pid: 5998)
  uwsgi socket 0 bound to TCP address 127.0.0.1:43637 (port auto-assigned) fd 3
  Python version: 2.7.13 (default, Jan 19 2017, 14:48:08)  [GCC 6.3.0 20170118]
  *** Python threads support is disabled. You can enable it with --enable-threads ***
  Python main interpreter initialized at 0x562bdad6fda0
  your server socket listen backlog is limited to 100 connections
  your mercy for graceful operations on workers is 60 seconds
  mapped 72760 bytes (71 KB) for 1 cores
  *** Operational MODE: single process ***
  Traceback (most recent call last):
    File "./dynamicefl/wsgi.py", line 12, in &lt;module&gt;
      from django.core.wsgi import get_wsgi_application
  ImportError: No module named django.core.wsgi
  unable to load app 0 (mountpoint='') (callable not found or import error)
  *** no app loaded. going in full dynamic mode ***
  *** uWSGI is running in multiple interpreter mode ***
  spawned uWSGI worker 1 (and the only) (pid: 5997, cores: 1)
  </code></pre>
  
  <p>A lot of the tutorials emphasize putting the path to the virtual environment in the .ini file, and I did (double checking with 'env' that I had the virtual environment right.) Here is the .ini file I'm working with</p>
  
  <pre><code>[uwsgi]
  home = /home/django/Env/worksheets
  chdir = /home/django/worksheets/dynamic-efl/dynamicefl
  module = dynamicefl.wsgi::application
  
  uid = www-data
  gid = www-data
  socket = localhost:9191
  chmod-socket = 644
  chown-socket = www-data
  
  processes = 4
  threads = 2
  logto = /var/log/uwsgi.log
  </code></pre>
  
  <p>I have experimented with changing the chdir command some, as I'm not sure exactly where it should be pointing, but regarless of where it points that results in a similar line in uwsgi.log:</p>
  
  <pre><code> -- no python application found, check your startup logs for errors ---
  </code></pre>
  
  <p>(Fun fact: I haven't been able to find reference to uwsgi startup logs)</p>
  
  <p>If I go to the site in my web browser, I get an 'Internal Server Error' message.</p>
  
  <p>I don't think that anything is getting as far an nginx, but I can include the .conf file and error logs, too, if that's helpful.</p>
  
  <p>I know that there are a log of similar questions, but I've looked at them and they're not helping me. (Which is not to say that they don't contain the answer.)</p>