Flask не может быть выполнено PHP - Нет модуля с именем flask - PullRequest
1 голос
/ 12 июля 2020

Привет, у меня есть сценарий PHP, который должен запускать файл Python flask с помощью команды exec. Моя проблема в том, что файл всегда имеет ошибку после выполнения:

Traceback (последний вызов последним): File "/opt/lampp/htdocs/memeon_data/Python-3.8.3/main .py ", строка 2, из flask import Flask, request, jsonify, render_template, Response ImportError: нет модуля с именем flask

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

PHP:

echo shell_exec ("python /opt/lampp/htdocs/memeon_data/Python-3.8.3/main.py 2> & 1");

Терминал:

source /opt/lampp/htdocs/memeon_data/Python-3.8.3/venv/bin/activate

python /opt/lampp/htdocs/memeon_data/Python-3.8.3/main.py

1 Ответ

1 голос
/ 12 июля 2020

Вы должны активировать venv, чтобы использовать python с Flask

Вы можете создать bash скрипт ie. run.sh

#!/bin/bash 
   
source /opt/lampp/htdocs/memeon_data/Python-3.8.3/venv/bin/activate
python /opt/lampp/htdocs/memeon_data/Python-3.8.3/main.py

и запустите его в PHP с bash

shell_exec("/bin/bash /opt/lampp/htdocs/memeon_data/Python-3.8.3/run.sh 2>&1");

Или вы можете пропустить этот скрипт и попробовать использовать полный путь к python который был создан внутри venv/bin - и thisp python должен использовать модули, установленные в venv

shell_exec("/opt/lampp/htdocs/memeon_data/Python-3.8.3/venv/bin/python /opt/lampp/htdocs/memeon_data/Python-3.8.3/main.py 2>&1");

BTW: это должно быть скорее 2>&1 без пробелов - одиночный & используется для запуска процесса в фоновом режиме, а с пробелами он может обрабатывать его как работающий в фоновом режиме или может выдавать ошибку как неправильную синтаксис.

...