Почему Python не может найти некоторые модули, когда я запускаю CGI-скрипты из Интернета?

Я понятия не имею, в чем может быть проблема здесь:

У меня есть несколько модулей из Biopython, которые я могу легко импортировать при использовании интерактивного приглашения или выполнении сценариев Python из командной строки.

Проблема в том, что когда я пытаюсь импортировать те же модули биопиона в веб-исполняемый скрипт cgi, я получаю "Ошибка импорта"

: Нет модуля с именем Bio

Есть идеи здесь?

3 ответа

Решение

Вот несколько возможностей:

  • Apache (в Unix) обычно запускается от имени пользователя и из другой среды для Python из командной строки. Попробуйте сделать небольшой скрипт, который просто распечатывает sys.version а также sys.prefixи сравните результат через apache и через командную строку, чтобы убедиться, что вы используете одну и ту же установку python в обеих средах.
  • Установлен ли Biopython в вашем домашнем каталоге или доступен только для чтения обычному пользователю? Опять же, потому что apache обычно работает от имени другого пользователя, возможно, у вас нет доступа к этому местоположению, поэтому вы не можете его импортировать.
  • Можешь попробовать? import site прежде чем пытаться импортировать Biopython? Возможно, что-то мешает импорту пакетов сайта при запуске через apache.

В сценарии cgi вы можете попытаться добавить путь к этому пакету перед любым импортом.

sys.path.insert(0, 'path to biopython package')

Если вы используете Apache, вы можете установить PYTHONPATH в файле conf с директивой SetEnv.

SetEnv PYTHONPATH "path to biopython package"

У меня была такая же проблема. Я решил эту проблему, изменив пользователя Apache в Linux Ubuntu с помощью команды в терминале:

sudo gedit /etc/apache2/envvars

Пожалуйста измените www-data на export APACHE_RUN_USER а также export APACHE_RUN_GROUP текущему пользователю или пользователю, который может запустить скрипт Python. Хорошо тебе провести время;)

Другие вопросы по тегам