Импорт библиотеки в Python, вызываемой PHP

Я пытаюсь вызвать скрипт Python из файла PHP, но мне не удается загрузить локальную библиотеку. Мой PHP может вызывать мой python, если он не загружает локальные библиотеки, и мой скрипт python работает при запуске вручную.

Вот минимальные (не) рабочие файлы:

index.php

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
  </head>
  <body>
    <?php
      $command = escapeshellcmd ("./getter.py") ;
      $output = shell_exec ($command) ;
      echo "<p>$output</p>" ;
    ?>    
  </body>
</html>

getter.py

#!/usr/bin/env python2
import got
if __name__ == "__main__" :
  print "Python2 working"

Где got — знаменитая местная библиотека.

Когда я вручную запускаю свой ./getter.py, печать происходит, но моя веб-страница ничего не отображает. Когда я комментирую import got, веб-страница также отображает печать.

Дополнительная информация :

  • ОС: Убунту 18.04.1
  • Веб-сервер: nginix 1.14.0
  • PHP: 7.2
  • Питон: 2.7.15rc1
  • Я новичок в веб-языке, поэтому я еще не знаю об инструментах отладки.
  • Нет проблем при импорте нелокальной библиотеки (например, os, csv или других)
  • Я попытался заменить $command = escapeshellcmd ("./getter.py") ; $output = shell_exec ($command) ; простым $output = shell_exec ("./getter.py") ;
  • Я попытался заменить #!/usr/bin/env python2 на #!/usr/bin/python2
  • Когда я прошу PHP или Python предоставить мне их текущий рабочий каталог, они оба возвращают значение /var/html/www/test, как и планировалось.

Вот дерево папок:

├── getter.py
├── got
│   ├── __init__.py
│   ├── manager
│   │   ├── __init__.py
│   │   ├── TweetCriteria.py
│   │   └── TweetManager.py
│   └── models
│       ├── __init__.py
│       └── Tweet.py
├── index.php
├── __init__.py
└── lib
    ├── __init__.py
    └── toto.py

Спасибо много.


person Motiss    schedule 17.11.2018    source источник
comment
Где getter.py и got по отношению друг к другу и к файлу PHP? Как вы установили got?   -  person Daniel Roseman    schedule 17.11.2018
comment
Все находится в одной папке /var/www/html/test принадлежит пользователю root. got был установлен с клоном git. Я только что попытался создать папку lib, содержащую toto.py и __init__..py, включая lib.toto, которая работает в PHP. Мне придется копнуть глубже.   -  person Motiss    schedule 17.11.2018
comment
Извините, но это действительно непонятно. Не могли бы вы обновить свой вопрос со структурой каталогов (например, используя tree).   -  person Daniel Roseman    schedule 17.11.2018
comment
Хорошо, только что сделал это.   -  person Motiss    schedule 17.11.2018
comment
Измените import got на from . import got и повторите попытку. Можете ли вы также попробовать добавить ошибку журнала?   -  person mostafazh    schedule 17.11.2018
comment
Я понял. Nginx выполнялся от имени пользователя root, что не соответствовало всем требованиям для запуска got, мне нужно было переустановить требования для всех пользователей. Спасибо за время, которое вы тратите, помогая мне.   -  person Motiss    schedule 18.11.2018


Ответы (1)


На самом деле это было вызвано проблемой зависимости. Некоторые необходимые библиотеки были установлены только для некоторых пользователей. И Nginx не мог получить к нему доступ как root, в то время как обычный пользователь мог.

person Motiss    schedule 18.11.2018