У меня есть исполняемый скрипт python, который архивирует данные с сервера mysql с использованием библиотеки py mysql. Сценарий хорошо работает из командной строки.
Я вызываю этот сценарий из php сценария, используя функцию escapeshellcmd, и я заставил его работать.
Я также создал bash скрипт, который я намерен использовать из crontab для архивации информации. Я также могу заставить этот скрипт работать, внеся изменения, описанные ниже.
Каким-то образом я попал в python версии и проблемы с путями.
, если я включу
#!/home/tim/anaconda3/bin/python
в качестве первой строки скрипта python работает при вызове скриптом php (я полагаю, что www-data как пользователь). Он не работает из сценария bash или командной строки, выдавая следующую ошибку:
File "./signal_archive.py", line 22, in <module>
import pymysql
ModuleNotFoundError: No module named 'pymysql'
Однако, если первая строка сценария python выглядит следующим образом:
#!/usr/bin/python3
скрипт работает из скрипта bash и командной строки, но не из скрипта php. Выдает следующую ошибку:
File "/home/tim/python/commodities_related/signal_archive.py", line 23, in <module>
import pandas as pd
ModuleNotFoundError: No module named 'pandas'
Оба пакета установлены в моей системе. Думая, что указание сценария на путь поможет, я добавил следующее к сценарию python, но пока безуспешно.
sys.path.append('/usr/lib/python3/dist-packages:')
sys.path.append('/usr/local/lib/python3.5/dist-packages:')
Очевидно, что я что-то упускаю; Я думаю, что сценарий php вызывается www-user, и я не знаю путь по умолчанию. Файл bash вызывается моим пользователем по пути, указанному в файле .bashr c. Тем не менее, мне может понадобиться указать apache или php (www-user), чтобы использовать указанную c установку python.
РЕДАКТИРОВАТЬ - чтобы быть более понятным, php скрипт (phpfile1. php) вызывает скрипт python. Когда я вызываю phpfile1. php из другого скрипта php (phpfile2. php), работающего на apache2, я все работаю, используя
#!/home/tim/anaconda3/bin/python
Когда я вызываю тот же файл (phpfile1. php ) из другого сценария php (phpfile3. php) из сценария bash это не удается. Кроме того, если я запускаю файл на месте с помощью следующего
./signal_archive.py
, я получаю сообщение об ошибке, но если я запускаю его с помощью следующей команды, это работает:
python signal_archive.py
Любые идеи, если это правильно или как это сделать? Спасибо.