Почему 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. Хорошо тебе провести время;)