У меня есть небольшое web.py
приложение Python, которое я хотел бы обслуживать под Apache, используя mod_python
. Платформа web.py
, а также другие сторонние модули Python, на которые опирается рассматриваемое приложение, устанавливаются в виртуальной среде. Виртуальная среда создается внутри: /home/ayaz/Sandbox/Scrapper/
Соответствующий фрагмент из конфигурации виртуального хоста для Apache, который я использую для настройки этого приложения, выглядит так:
<Location "/api">
PythonPath "['/home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/', '/home/ayaz/project/'] + sys.path"
#PythonHandler wsgiref.modpython_gateway::handler
PythonHandler modpython_gateway::handler
SetHandler python-program
PythonOption wsgi.application device_api::main
PythonOption device_api /api/
</Location>
В браузере, когда я пытаюсь получить доступ к URL-адресу /api
, я получаю 500
с сервера с ошибкой в журналах, сообщающей, что модуль web
импортирован из файла device_api.py
( мое заявление) не может быть найдено; другими словами, я вижу ImportError
. Я не уверен, почему он не может найти модуль web
.
Я знаю, что директива PythonPath
работает, по крайней мере частично , исходя из того, что интерпретатор Python может найти файл device_api.py
по пути, определенному в этой директиве. Но он не может найти остальные модули, для которых путь также определен в той же директиве.
Любая помощь с этим будет высоко ценится.
Спасибо!
ОБНОВЛЕНИЕ # 1
Ответ Неда заставил меня посмотреть
через каталог site-packages
для виртуальной среды у меня есть.
Хотя разрешения выглядели нормально
внутри каталога я понял
что mod_python/Apache
не смог
читать eggs
. Так как я установил
все пакеты внутри виртуальной
окружение с использованием easy_install
, все они находятся в формах
яиц. Так, например, если я переехал
каталог
/home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/web.py-0.34-py2.5.egg/web/
в
/home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/
(по сути, вытащив его из яйца
файл / каталог), mod_python
остановлено
жалуется на пропавших без вести web
модуль (конечно, потом
жаловаться на пропавших без вести
сторонние модули).
У меня есть Apache, настроенный для работы в качестве моего
пользователь и группа, то есть ayaz
, а я
проверил, что разрешения на
/home/ayaz/.python-eggs
каталог
у нас все в порядке.
Я тогда использовал это Используя яйца с
mod_python обманным путем объяснил
документация по развертыванию Django
стр. Но это не помогло.
В конце концов, я укусила пулю, и для
каждый сторонний модуль, который
mod_python
жаловался, что не может
найти, я переместил актуальный каталог
изнутри яйцо для этого модуля
вне яйца и в
site-packages
каталог для
виртуальная среда. Это сделано
mod_python
найти модули.
Теперь я действительно не уверен, почему это
и почему mod_python
нет
умеет читать яйца.