После более тщательного анализа я думаю, что понял, что здесь происходит.
Когда Python запускается, он устанавливает sys.path (все это как часть инициализации интерпретатора).
В настоящее время среда используется для определения того, где найти файлы .pth. Если в это время PYTHONPATH не определен, он не найдет ваши модули, установленные в sys.prefix. Кроме того, поскольку easy-install.pth, вероятно, установлен в каталог с вашим пользовательским префиксом, он не обнаружит этот файл .pth для анализа.
Добавление переменных среды в os.environ или sys.path после инициализации интерпретатора не приведет к повторному анализу файлов .pth. Вот почему вы вынуждены вручную делать то, что, как вы ожидаете, Python будет делать естественным образом.
Я думаю, что правильное решение состоит в том, чтобы убедиться, что пользовательский путь доступен интерпретатору Python во время запуска интерпретатора (то есть до выполнения mysite.fcgi).
Я искал варианты добавления переменной среды PYTHONPATH в mod_fastcgi, но не вижу такой возможности. Возможно, это общая опция Apache, поэтому она не задокументирована в mod_fastcgi, или, возможно, невозможно установить статическую переменную в конфигурации mod_fastcgi.
Учитывая это, я считаю, что вы могли бы найти обходной путь со следующим:
- Создайте скрипт-оболочку (скрипт оболочки или другой скрипт Python), который будет вашим новым обработчиком FastCGI.
- В этом скрипте-оболочке установите переменную среды PYTHONPATH на ваш префиксный путь (точно так же, как вы установили в своей пользовательской среде, которая работает).
- Пусть скрипт-оболочка запускает процесс Python для исходного обработчика fastcgi (mysite.fcgi) с измененной средой.
Хотя у меня нет подходящей среды для тестирования, я думаю, что сценарий оболочки-оболочки будет выглядеть примерно так:
#!/bin/sh
export PYTHONPATH=/your/local/python/path
/path/to/python /path/to/your/fastcgi/handler # this line should be similar to what was supplied to mod_fastcgi originally
Могут быть рассмотрены альтернативные обходные пути.
- Из mysite.fgci заставьте Python повторно обработать sys.path на основе новой, измененной среды. Я не знаю, как это будет сделано, но это может быть чище, чем сценарий-оболочка.
- Найдите параметр Apache/mod_fastcgi, который позволяет указать переменную среды (PYTHONPATH) для процесса fastcgi.
person
Jason R. Coombs
schedule
06.09.2009