Проблемы с модулями Python при исполнении из PHP Script

У меня проблема, которая сводит меня с ума. Я провел буквально дни на этом, и я еще не мог решить это. У меня есть PHP-скрипт (дублированный objectsBabylonGLTF.php для примера), который использует функцию PHP exec () для вызова скрипта Python 2.7 (omekaitemfileslist2.py). Мой веб-сервер — Apache, а сервер — Ubuntu Server 16.04.

$omekaOutput = [];
exec('python omekaitemfileslist2.py 28  2>&1', $omekaOutput, $status);
print_r($omekaOutput);

Этот скрипт Python, в свою очередь, использует API Омека (Цифровая система управления активами). Файл Python API клиента (содержащий набор функций HTTP-глаголов (GET, POST …) для общения с Omeka DAMS называется omekaclient.py.

Другими словами, omekaitemfilelist2.py импортирует в него файл omekaclient.py, который, в свою очередь, импортирует модули omekaclient.py (три модуля), в том числе модуль Python httplib2.

Я получаю ошибку:

Array(
[0] => Traceback (most recent call last):
[1] =>   File "omekaitemfileslist2.py", line 6, in

[2] =>     from omekaclient import OmekaClient
[3] =>   File "/var/www/html/map/omekaclient.py", line 4, in

[4] =>     import httplib2
[5] => ImportError: No module named httplib2)

Таким образом, это означает, что omekaitemfileslist2.py выполняется и omekaclient.py выполняется (я много играл с разрешениями на моем сервере Ubuntu — кажется, это не проблема с разрешениями).

httplib2 устанавливается как Python 3 и python 2, хотя здесь мои скрипты используют Python2. Кроме того, другие требуемые модули (urllib3) также устанавливаются таким же образом и не создают проблем.

Я посмотрел на конфигурацию apache2, включил моды для cgi и python — ничего странного! Я изменил разрешения — ничего! Сумасшедшая вещь в том, что если я переключу порядок импорта urllib3 до httplib2, жалоб не будет (только жалоба на httplib2 не найдена)

Но подождите, это еще более странно, чем это. Намек на проблему появился, когда я попытался вставить в omekaclient.py код для импорта модуля Python, указав путь:

import imp
httplib2 = imp.load_source('httplib2', '/home/hb/.local/lib/python2.7/site-packages/httplib2/__init__.py')

Мы получаем на стороне PHP некоторые интересные странные вещи о Permission Error 13. Посмотрите любезно.

Array(
[0] => Traceback (most recent call last):
[1] =>   File "omekaitemfileslist2.py", line 6, in
Array(
[0] => Traceback (most recent call last):
[1] =>   File "omekaitemfileslist2.py", line 6, in

[4] =>     httplib2 = imp.load_source('httplib2', '/home/hb/.local/lib/python2.7/site-packages/httplib2/__init__.py')
[5] => IOError: [Errno 13] Permission denied)

И еще одна вещь, все работает как шарм, когда я запускаю все из терминала сервера.

Даже если я попытался запустить все из PHP на сервере в интерактивном терминале (через php -a) или даже в виде файла через опцию -f (в этом отношении все работает нормально):

php -f objectsBabylonGLTF.php

Все скрипты питонов запускаются из терминала нормально.

Я должен упомянуть, что статус функции exec () PHP равен 1 (что обычно, если все хорошо, должно быть 0).

Еще один совет, который я получил в последнее время, — это мой PHP-скрипт, если я скажу (просто для выяснения вещей):

$command = "python3 --version ";
exec($command, $output, $status);
print_r($output);

Я получаю в качестве вывода (без сюрпризов):

Array ( [0] => Python 3.5.2 )

Теперь, если я попробую на Python2:

$command = "python2 --version ";
exec($command, $output, $status);
print_r($output);

Я получаю в качестве вывода (ничего !!!):

Array ( )

Теперь подождите, если я перенаправлю stderror в stdoutput для Python 2:

$command = "python --version 2>&1";
exec($command, $output, $status);
print_r($output);

Угадай, что я получаю:

Array ( [0] => Python 2.7.12 )

Пожалуйста, любая помощь будет принята с благодарностью. заранее спасибо

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]