WSGI: ImportError: No module named hello (module in the same directory of the main .py file)

别来无恙 提交于 2019-12-11 16:28:13

问题


This is not a duplicate of Apache with virtualenv and mod_wsgi : ImportError : No module named 'django' since here I'm not using any virtualenv, and also I'm not trying to import another framework's module (such as django), but just a module in the same directory.


Here is my setup:

/var/www/test/app.py:

import os, time, sys
from bottle import route, run, template, default_app

os.chdir(os.path.dirname(os.path.abspath(__file__)))

import hello

@route('/')
def index():
    return 'Hello world Python ' + sys.version

application = default_app()

/var/www/test/hello.py:

# just an example module
def test():
    print 'hello'

Apache config:

<VirtualHost *:80>
  ServerName example.com
  <Directory />
    Require all granted
  </Directory>
  WSGIScriptAlias / /var/www/test/app.py
  WSGIDaemonProcess test user=www-data group=www-data processes=5 threads=5 display-name=test python-path=/var/www/test/
</VirtualHost>

Then I get:

ImportError: No module named hello

What is incorrect? Shouldn't WSGIDaemonProcess ... python-path=/var/www/test/ help the module hello to be loaded?


回答1:


Apache does not change to the current working directory, thus it will not search for hello where you think.

You might change app.py in following way.

import os, time, sys
from bottle import route, run, template, default_ap
# add the scripts directory to the python path so that hello can be found
sys.path.insert(0, os.path.realpath(os.path.dirname(__file__)))

Advantage you do not have to mess with the apache config files




回答2:


The solution is:

  • to have a WSGIDaemonProcess ... python-path=... indeed,

  • but also a WSGIScriptAlias ... process-group=... (not sure why this process-group parameter is linked to allowing or not to load modules from the same directory, but it works!)

Example:

WSGIScriptAlias / /var/www/test/app.py process-group=test
WSGIDaemonProcess test user=www-data group=www-data processes=5 threads=5 display-name=test python-path=/var/www/test/


来源:https://stackoverflow.com/questions/59088010/wsgi-importerror-no-module-named-hello-module-in-the-same-directory-of-the-ma

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!