Активируйте virtualenv из скрипта python или php, а не по SSH - PullRequest
4 голосов
/ 16 марта 2012

Я пытаюсь активировать свой virtualenv с помощью php-скрипта или python-скрипта, но без использования SSH.

Это позволяет моему файлу website.com/something.py получить доступ к определенным библиотекам (если это можно сделать другим, более простым способом, сообщите мне)

Мой PHP-код:

<?php
echo "A";
$result = exec("source ENV/bin/activate");

if ($result){
echo "Worked";
}
else{
echo "didnt work";
}

echo "B";
$result = system("python test.py");

?>

и у меня есть test.py =

def main():
    print "hello"

    try:
        import xlrd
    except:
        try:
            print "xlrd didnt load"
            import MySQLdb
        except:
            print "mdb,xlrd didnt load"


main()

У моей установки virtualenv установлен xlrd. Это вывод, который я получаю на веб-странице:

Adidnt workBhello xlrd didnt load

Имеет смысл, что xlrd не загружается, но почему команда источника не работает? Это все работает в SSH

1 Ответ

7 голосов
/ 16 марта 2012

Согласно документам , получение сценария activate внутри оболочки просто настраивает переменную окружения $PATH, указывая на каталог bin в virtualenv.Этот скрипт не может работать из PHP, потому что внешний исполняемый файл может никогда не изменять среду вызывающего по соображениям безопасности.

В документации также сказано, что вы можете сделать вместо этого:

Если вы напрямую запускаете скрипт или интерпретатор python из каталога bin/ virtualenv (например, path/to/env/bin/pip или /path/to/env/bin/python script.py), активация не требуется.

Так что вы можетевместо этого просто укажите полный путь к установке Python:

$result = system("ENV/bin/python test.py");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...