импорт python завершается неудачно при вызове из PHP - PullRequest
3 голосов
/ 18 декабря 2009

У меня загадочная проблема при попытке импортировать модуль в python, только когда скрипт вызывается из php через систему или exec.

Из оболочки Python:

import igraph #This works.

если предыдущая строка была в файле, скажем, test_module.py, то:
python test_module.py в bash работает.

В PHP:
exec ("python test_module.py", $ output, $ retval) -> сбои: $ retval = 1.

Однако, если вместо этого используется сценарий: import math, то это нормально.

Кто-нибудь когда-нибудь имел дело с чем-то подобным?

Ответы [ 4 ]

1 голос
/ 18 декабря 2009

одна вещь, которую нужно проверить, это sys.path

Посмотрите, в чем разница, когда вызывается в каждую сторону

0 голосов
/ 20 мая 2019

Это может быть связано со следующей причиной.

При импорте пакета выполняется поиск определенных каталогов. Эти каталоги указаны внутри sys.path

Создайте файл python со следующими строками.

import sys
print(sys.path)
  • Запустите этот файл в оболочке и запишите результат (список путей к каталогам).
  • Запустите тот же файл на локальном сервере (используя PHP) и сравните выходные данные.

Путь, отсутствующий в выводе PHP, вероятно, тот, который содержит пакет. Поэтому добавьте следующие строки в файл python, который вы запускаете на сервере.

import sys
sys.path.append("path-to-the-missing-directory")

RUN IT.

0 голосов
/ 25 декабря 2015

Это происходит потому, что вы установили эти пакеты под другим пользователем, может быть, root или что-то еще.

Как я отладил это, я проверил вывод sys.path для обоих случаев (shell, и exec php, который имеет пользовательские www-данные по умолчанию), и затем я сравнил оба.

Я заметил, что путь '/root/.local/lib/python2.7/site-packages' отсутствует, когда я запускал его из PHP, который содержал именно эти отсутствующие пакеты. Поэтому я просто скопировал содержимое этой папки в '/usr/lib/python2.7/dist-packages/', что решило проблему.

0 голосов
/ 18 декабря 2009

Является ли модуль igraph стандартным путем к модулю Python, или он находится в том же каталоге, что и ваш отдельный скрипт? Если это так, вполне возможно, что PHP вызывает файл python с другим рабочим каталогом и пытается импортировать вещи, относящиеся к этому пути, а не к пути сценария.

...