Python импорт MySQLdb, внутренняя ошибка сервера Apache

У меня проблема, аналогичная описанной в.cgi проблема с веб-сервером", хотя я рассмотрел и проверил ранее предложенные решения без успеха.

Я использую ту же программу на Mac OS X 10.5.8, Apache 2.2.13, используя Python 2.6.4. Я могу успешно запустить код в оболочке Python и командной строки терминала, но я получаю<type 'exceptions.ImportError'>: No module named MySQLdb когда я пытаюсь запустить его вHttp: //localhost/cgi-bin/test.cgi". Он успешно запускается, если я закомментируюimport MySQLdb.

#!/usr/bin/env python
import cgitb
cgitb.enable() 
import MySQLdb

print "Content-Type: text/html"
print
print "<html><head><title>Books</title></head>"
print "<body>"
print "<h1>Books</h1>"
print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")

for row in cursor.fetchall():
    print "<li>%s</li>" % row[0]

print "</ul>"
print "</body></html>"

connection.close()

[редактировать] На основании первого ответа:

Если я изменюtest.cgi как указано и запустить его из командной строки терминала, каталогMySQLdb показано вsys.path, Однако, когда я запускаю его через веб-сервер, я получаю ту же ошибку. Если я закомментируюimport MySQLdb вtest.cgi с новым циклом for страница не открывается.

Как мне установить Apache's PYTHONPATH? В оболочке python я попробовал:

import MySQLdb
import os
print os.path.dirname(MySQLdb.__file__)

Затем, основываясь на других постах, я попытался добавить результирующий путь в оригиналtest.cgi:

import sys
sys.path.append('/Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.5-i386.egg/')

но это произвело ту же ошибку.

[редактировать]

К сожалению, ни одно из решений не сработало. Добавление пути кsys.path дал мне ту же ошибку, что и раньше. Жесткое кодирование пути к двоичному файлу Python#!/Library/Frameworks/Python.framework/Versions/Current/bin/python выдается длинная ошибка, часть которой показана:

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

 /Library/WebServer/CGI-Executables/test.cgi in ()
   15 #sys.path.append('/Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/')
   16 
   17 import MySQLdb
   18 #import _mysql
   19 
MySQLdb undefined
 /Library/WebServer/CGI-Executables/build/bdist.macosx-10.5-i386/egg/MySQLdb/__init__.py in ()
 /Library/WebServer/CGI-Executables/build/bdist.macosx-10.5-i386/egg/_mysql.py in ()
 /Library/WebServer/CGI-Executables/build/bdist.macosx-10.5-i386/egg/_mysql.py in __bootstrap__()
 /Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/pkg_resources.py in resource_filename(self=<pkg_resources.ResourceManager instance at 0x3c8a80>, package_or_requirement='_mysql', resource_name='_mysql.so')
  848         """Return a true filesystem path for specified resource"""
  849         return get_provider(package_or_requirement).get_resource_filename(
  850             self, resource_name
  851         )
  852 
self = <pkg_resources.ResourceManager instance at 0x3c8a80>, resource_name = '_mysql.so'

...

<class 'pkg_resources.ExtractionError'>: Can't extract file(s) to egg cache The following error occurred while trying to extract file(s) to the Python egg cache: [Errno 13] Permission denied: '/Library/WebServer/.python-eggs' The Python egg cache directory is currently set to: /Library/WebServer/.python-eggs Perhaps your account does not have write access to this directory? You can change the cache directory by setting the PYTHON_EGG_CACHE environment variable to point to an accessible directory. 
      args = ("Can't extract file(s) to egg cache\n\nThe followin...nt\nvariable to point to an accessible directory.\n",) 
      cache_path = '/Library/WebServer/.python-eggs' 
      manager = <pkg_resources.ResourceManager instance at 0x3c8a80> 
      message = "Can't extract file(s) to egg cache\n\nThe followin...nt\nvariable to point to an accessible directory.\n" 
      original_error = OSError(13, 'Permission denied')

Кажется, эта ошибка подразумевает, что она может иметь отношение к настройке PYTHON_EGG_CACHE и / или разрешений ...

[редактировать] Решение:

Чтобы проверить, какую версию Python использует Apache, я добавил следующий код:

import sys
version = sys.version
path = sys.path

...

print "<h1>%s</h1>" % version                                                                  
print "<h1>%s</h1>" % path

это указывало на то, что Apache действительно использовал Python 2.5.1, установленный производителем, а не Python 2.6.4 с соответствующим модулем MySQLdb. Таким образом, добавив следующий код к оригиналуtest.cgi исправил проблему:

import os
os.environ['PYTHON_EGG_CACHE'] = '/tmp'
import sys
sys.path.append('/Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.5-i386.egg')

Возможно, существует систематическое исправление, изменяющее PYTHONPATH в httpd.conf APACHE, но я еще не понял этого.

Ответы на вопрос(2)

Ваш ответ на вопрос