Локальный пакет Python не загружается при вызове из PHP - PullRequest
2 голосов
/ 15 августа 2011

Итак, я хочу запустить программу на Python с установкой домашнего каталога PyProj из PHP.PHP и Python просты, но я приведу их ниже для полноты.

Я тестировал запуск Python вручную, используя и sys.path.append, и PYTHONPATH, чтобы указать местоположение пакета.Оба эти метода работают.

Однако, когда я shell_exec скрипт из PHP, мне говорят ImportError: No module named pyproj.

Рекурсивная проверка файловой системы показывает, что все читается/ исполняемый пользователем, группой и др.

Есть мысли о том, почему я не могу запустить это?

Я называю это в сценарии PHP следующим образом

<?php
        putenv('PYTHONPATH="/home/userperson/public_html/lib64/python2.4/site-packages"');
        $ret=shell_exec("./bob");
        print $ret;
?>

Программа Python проста.

#!/usr/bin/python
import pyproj
import sys
sys.path.append("/home/userperson/public_html/lib64/python2.4/site-packages")
surfproj = pyproj.Proj(proj='lcc',lat_1=40,lat_2=50,lon_0=-95,lat_0=40,ellps='WGS84')
x,y=surjproj(-95,45)
print x

1 Ответ

2 голосов
/ 15 августа 2011

Хороший способ решить такую ​​проблему - распечатать sys.path из скрипта Python в этой среде и проверить текущий путь:

 #!/usr/bin/python
 import sys
 print sys.path

Я предполагаю, что он будет содержать'"/home/userperson/public_html/lib64/python2.4/site-packages"' (обратите внимание на лишние двойные кавычки).

Документация putenv($setting) ничего не говорит о поддержке синтаксиса оболочки, кавычек или экранирования внутри параметра, поэтому любые символы, присутствующие в строках, несомненноконец в значении переменной среды.Возможное решение проблемы:

putenv('PYTHONPATH=/home/userperson/public_html/lib64/python2.4/site-packages');

Еще один полезный совет - поместить путь в отдельную переменную и просто набрать putenv("PYTHONPATH=$pythonpath") или putenv("PYTHONPATH=" . implode(':', $pythonpath)), так как это позволит вам проверитьесли пути существуют из вашего PHP-скрипта с file_exists.

В старых версиях PHP могут возникнуть проблемы, если включен safe_mode, а PYTHONPATH отсутствует в safe_mode_allowed_env_vars, но, надеюсь, выне работает на сервере, настроенном таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...