mod_python не может найти модуль web.py в виртуальной среде - PullRequest
2 голосов
/ 08 декабря 2010

У меня есть небольшое 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 нет умеет читать яйца.

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Чтобы ответить на этот вопрос, я собираюсь скопировать параграфы обновления из моего вопроса и опубликовать их как ответ (поскольку они, кажется, объясняют в некоторой степени, как мне удается избавиться от проблемы).

Ответ Неда заставил меня просмотреть каталог сайтов-пакетов для виртуальная среда у меня есть. В то время как разрешения выглядели хорошо внутри каталог для меня, я понял, что mod_python / Apache не смог прочитать яйца. Так как я установил все пакеты внутри виртуального среда, использующая 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 остановлен жаловаться на пропавшую сеть модуль (конечно, потом жаловаться на пропавших без вести сторонние модули).

У меня есть Apache, настроенный для работы в качестве моего пользователь и группа, то есть аяз, и я проверил, что разрешения на /home/ayaz/.python-eggs каталог был хорошо.

Затем я использовал это Использование яиц с mod_python обманом объяснил на Страница документации по развертыванию Django. Но это не помогло. В конце концов, я немного пуля, и для каждого третьего лица модуль, который mod_python жаловался на это не могу найти, я переехал фактический каталог из яйца для этого модуль вне яйца и в каталог сайтов-пакетов для виртуальная среда. Это сделано mod_python найти модули.

Теперь я действительно не уверен, почему это происходит, и почему mod_python не умеет читать яйца.

1 голос
/ 08 декабря 2010

Может ли это быть проблема с правами доступа к файлу или каталогу? Убедитесь, что все файлы и каталоги в вашем virtualenv site-packages доступны от имени пользователя, под которым Apache и mod_python работают.

...