s4f 06.03.2012 18:19

Есть вопрос!python + mod_wsgi + httpd

Дано: Centos, Python + WSGI + HTTPD.
Ошибка: No module named base...

В VirtualHost добавил только:
...
WSGIScriptAlias /test /var/www/html/mysite.net/wsgi/hello_app.wsgi
...

простейшее приложение работает http://mysite.net/test
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import cgi

def application(environ, start_response):
form = cgi.FieldStorage(fp=environ['wsgi.input'],
environ=environ,
keep_blank_values=1)
write = start_response('200 OK', [('Content-type', 'text/html')])
if form.getvalue('name'):
write('<html><head><title>Hello!</title></head>\n')
write('<body>\n')
write('<h1>Hello %s!</h1>\n' % form['name'].value)
#c=1+3
#write('c=' % c)
else:
write('<html><head><title>Who is there?</title></head>\n')
write('<body>\n')
write('<h1>Who is there?</h1>\n')
write('<form action="%s" method="POST">\n' % environ['SCRIPT_NAME'])
write('What is your name?<br>\n')
write('<input type="text" name="name" value="%s"><br>\n'
% cgi.escape(form.getvalue('name', ''), 1))
write('<input type="submit" value="That is my name"></form>\n')
write('</body></html>\n')
return None


Попытался запустить второй пример:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import sys; sys.path.append('../../../')
import web.wsgi.base, time

class Application(web.wsgi.base.BaseApplication):
def start(self):
self.output('Environ Order:\n')
self.environ['Application'] = time.time()
time.sleep(1)
self.headers.append(('Appliction',str(time.time())))
self.output('Middleware1 ',self.environ['Middleware1'])
self.output('\n')
self.output('Middleware2 ',self.environ['Middleware2'])
self.output('\n')
self.output('Application ', self.environ['Application'])
self.output('\n')

class Middleware1(web.wsgi.base.BaseMiddleware):
def environ(self, environ):
time.sleep(1)
environ['Middleware1'] = time.time()
return environ

def headers(self, headers):
time.sleep(1)
headers.append(('Middleware1',str(time.time())))
return headers

def transform(self, output):
return output + ['Middleware1\n']

class Middleware2(web.wsgi.base.BaseMiddleware):
def environ(self, environ):
time.sleep(1)
environ['Middleware2'] = time.time()
return environ

def headers(self, headers):
time.sleep(1)
headers.append(('Middleware2',str(time.time())))
return headers

def transform(self, output):
return output + ['Middleware2\n']

print "Running test..."
application = web.wsgi.runCGI(Middleware1(Middleware2(Application())))


Но не работает.
Ошибка в /var/log/httpd/error_log(LogLevel info):

[Tue Mar 06 17:57:52 2012] [error] [client xxx.xxx.xxx.xxx] import web.wsgi.base, time
[Tue Mar 06 17:57:52 2012] [error] [client xxx.xxx.xxx.xxx] ImportError: No module named base

Понятно, что чего-то не хватает. Но чего? Установил кучу пакетов:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@srv ~]# rpm -qa | grep python
audit-libs-python-1.7.18-2.el5
python-2.4.3-44.el5_7.1
python-paste-deploy-1.3.3-1.el5
python-wsgiref-0.1.2-3.el5
python-simplejson-2.0.9-8.el5
python-imaging-1.1.5-7.el5
python-repoze-who-1.0.18-2.el5
python-repoze-tm2-1.0-0.6.a5.el5
python-sqlite2-2.3.3-1.el5
python-dateutil-1.2-1.el5
libxslt-python-1.1.17-2.el5_2.2
python-sqlite-1.1.7-1.2.1
gamin-python-0.1.7-8.el5
mod_python-3.2.8-3.1
python-numeric-23.7-2.2.2.el5_6.1
python-webob-0.9.8-2.el5
python-paste-1.7.4-1.el5
python-tempita-0.2-2.el5
python-myghty-1.1-3.el5
python-werkzeug-0.6.2-1.el5
python-zope-interface-3.0.1-11.el5
python-crypto-2.0.1-4.el5.2
python-transaction-1.0-0.4.a1.el5
python-webflash-0.1-0.1.a9.el5
python-weberror-0.10.1-1.el5
python-toscawidgets-0.9.8-1.el5
python-webpy-0.32-3.el5
dbus-python-0.70-9.el5_4
python-urlgrabber-3.1.0-6.el5
libxml2-python-2.6.26-2.1.12.el5_7.1
python-devel-2.4.3-44.el5_7.1
ipython-0.8.4-1.el5
python-elementtree-1.2.6-5
python-iniparse-0.2.3-4.el5
python-libs-2.4.3-44.el5_7.1
python-setuptools-0.6c5-2.el5
python-webtest-1.2-1.el5
python-wsgiproxy-0.1-4.el5
python-flup-1.0-2.el5
python-pygments-1.4-3.el5
python-beaker-1.5.4-1.el5
python-repoze-what-1.0.8-4.el5
MySQL-python-1.2.1-1
python-nose-0.11.3-2.el5
python-matplotlib-0.99.1.2-1.el5


Подскажите, плиз.


Тэги: mod_wsgi No module named base python
+ 0 -
Похожие Поделиться

cppmm 12.03.2012 16:06 #
Есть подозрение, что не в настройках сервера косяк, а в самом приложении где-нибудь в строке
class Application(web.wsgi.base.BaseApplication):
Надо звать местных питонщиков - пусть разбираются.
Olloff 25.03.2012 18:42 #
Вообще ниразу не питонщик, но, скорее всего, ImportError говорит о невозможности подгрузить сам модуль, а не использовать его функции, попробуй...
1
2
$ python
> import base



Если дает ту же ошибку импорта, то проблема в самом пайтоне и его PythonPath, если нет - значит проблема в путях для самого модуля WSGI (скажем, у mod_wsgi>2 это директива WSGIPythonHome).
Скажем, запускаясь из изолированного окружения эта директива нужна обязательно, иначе пойдут такие вот ошибки импорта.

Кроме того, может быть проблема в несовместимости версий пайтона и модуля wsgi, мне пришлось из-за этого пересобирать 2 версии mod_wsgi и пайтона.
Для mod_wsgi можно проверить по тому, какой файл подгружается из /etc/apache2/mods-available/wsgi.load