6

I got nginx + uWSGI running on localhost inside a virtualenv with a simple hello world program, but I get this error when I replace the hello world with a simple Flask app:

File "./wsgi_configuration_module.py", line 1, in <module>
    from flask import Flask
ImportError: No module named flask
unable to load app mountpoint

Here's the flask app (wsgi_configuration_module.py):

from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "hello world"

if __name__ == "__main__":
    application.run()

uWSGI config (app_conf.xml):

<uwsgi>
    <socket>127.0.0.1:9001</socket>
    <chdir>/srv/www/labs/application</chdir>
    <pythonpath>/srv/www</pythonpath>
    <module>wsgi_configuration_module</module>
    <callable>application</callable>
    <no-site>true</no-site>
</uwsgi>

nginx config:

server {
    listen   80;
    server_name localhost;
    access_log /srv/www/labs/logs/access.log;
    error_log /srv/www/labs/logs/error.log;

    location / {
        include        uwsgi_params;
        uwsgi_pass     127.0.0.1:9001;
    }

    location /static {
        root   /srv/www/labs/public_html/static/;
        index  index.html index.htm;
    }
}

virtualenv stored in ~/virtual_env with Python 2.7 + nginx + uWSGI + Flask installed in a virtualenv called basic.

Things I've tried to solve this:

  1. set the --home (-H) option to my virtualenv folder ~/virtual_env while running uWSGI.

Other info:

  1. I have the same setup working outside of a virtualenv. Things go wrong only when I try to replicate the setup inside of a virtualenv.

Where have I gone wrong?

vjk2005
  • 175
  • 1
  • 2
  • 8

2 Answers2

5

Just add path to your virtual env to <pythonpath> in uwsgi's app_conf.xml file. eg:

<pythonpath>/srv/www</pythonpath>
<pythonpath>/home/user/env/lib/python2.6/site-packages</pythonpath>
<module>wsgi_configuration_module</module> 
rszalski
  • 119
  • 1
  • 9
sjn
  • 166
  • 3
3

the -H/--home/--virtualenv option does not expand the ~ symbol. Specify it as an absolute path and it should work.

The same apply to configfiles, so you would add

path_to_virtualenv

roberto
  • 1,812
  • 12
  • 8