Intereting Posts
PDO fetchAll () первичный ключ как ключ группы массива Ошибка SMTP-сервера phpmailer Как включить PHP-код в CSS? php: Как сохранить сокет клиента (не закрыт), так что дополнительный скрипт может получить его для отправки ответа? Morris Js и Codeigniter передают данные от контроллера Ошибка MYSQL: предупреждение: mysqli_fetch_assoc () ожидает, что параметр 1 будет mysqli_result, boolean given Случайное воспроизведение в случайном порядке без повторения одинаковых результатов как перезагрузить мою php-страницу каждые 2 минуты с помощью javascript? PHP ternary operator vs switch statement vs if-elseif …, который я должен использовать? Prestashop 1.6 – добавьте настраиваемое поле в категорию Как после получения информации от БД отправьте электронное письмо загрузка изображений в codeigniter, требуется файл пользователя? Значения из пользовательских мета-ящиков повторяются в сообщениях Сообщение об ошибке php для одной страницы? Строгие стандарты: только переменные должны передаваться по ссылке

Вызов python из php завершается с ошибкой при импорте numpy

Попытка вызывать скрипт python (2.6) из php, когда вы делаете HTTP-запрос GET с Android, но если в моем скрипте находится numpy import, я получаю сбой, если я его удалю, скрипт / вызов работает. Я вычисляю спектр БПФ числового поля в MySQL, поэтому мне нужно numpy (или я?).

Я смотрю на подобные вопросы по SO, и этот , ответивший @ dietrich-epp, является лучшим, но когда я пытаюсь сделать такое же предложение, мой скрипт все еще терпит неудачу.

Вот моя часть импорта моего скрипта python:

import os, os.path, sys import numpy import string import math import MySQLdb 

И начало моего PHP-файла:

 <?php putenv('PYTHONPATH=/usr/lib/python2.6/site-packages:'); ... 

И это, как я называю свой скрипт python:

 $command = "/var/www/html/tremcam/tst0.py localhost baseline@nd.edu 2>&1"; $pid = popen( $command,"r"); while( !feof( $pid ) ) { #echo fread($pid, 256); print(json_encode(fread($pid, 256))); flush(); ob_flush(); usleep(100000); } pclose($pid); 

И мои переменные среды имеют значение PYTHONPATH:

 /var/www/html/tremcam/pythons /usr/lib/python2.6/site-packages /usr/lib /usr/lib/python26.zip /usr/lib/python2.6 /usr/lib/python2.6/plat-linux2 /usr/lib/python2.6/lib-tk /usr/lib/python2.6/lib-old /usr/lib/python2.6/lib-dynload /usr/lib/python2.6/site-packages/gtk-2.0 /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info 

Должно ли это ( PYTHONPATH=/usr/lib/python2.6/site-packages ) указывать вместо /usr/lib/python2.6/site-packages/numpy ?

Я попытаюсь использовать passthru () вместо того, как я это имею в PHP. Обратите внимание, что после того, как я смогу импортировать numpy как np, код займет несколько секунд, это также будет проблемой?

Обновление: если я использую: passthru('/var/www/html/tremcam/tst0.py localhost baseline@nd.edu 2>&1',$result);

Я получаю код статуса выхода 139, так что это не очень полезно для меня, как вы думаете?

Попробуйте с setsebool httpd_tmp_exec on если он работает, сделайте его постоянным с помощью setsebool -P httpd_tmp_exec on

Это должно быть SELinux, запрещающее Apache ваши каталоги pytonpath (и да, вы должны предоставить очень маленькую папку, если она все еще не работает, но она не должна быть необходимой вообще).

Немного менее чистый подход заключается в комментировании этой строки import ctypeslib в /<your numpy path>/numpy/__init__.py

У меня была та же проблема, и оба подхода работали нормально (последнее, хотя может привести к некоторой несогласованности в более поздних разработках, поэтому я предлагаю вам сначала попробовать setsebool)