树莓派4中Python脚本通过PHP exec执行时出现MySQL模块缺失问题
解决PHP exec调用Python脚本时找不到mysql.connector模块的问题
树莓派4设备上,bb_refresh_sensors_from_php.py脚本在Thonny IDE和本地CLI中可正常运行,但通过PHP exec()调用时,抛出ModuleNotFoundError: No module named 'mysql'错误。已确认CLI与PHP exec环境下pip和Python版本一致,无MySQL依赖的脚本可正常被PHP调用。
可能的解决方案
1. 使用Python解释器的绝对路径执行脚本
即使which pip结果一致,PHP的exec环境可能仍未正确关联到目标Python解释器。先在本地CLI中获取Python3的绝对路径:
which python3
将PHP中的exec命令改为使用该绝对路径调用脚本,例如:
$number_of_sensors_on_bus = exec("/usr/bin/python3 /home/wp/PythonCode/bb_refresh_sensors_from_php.py 2>&1");
2. 手动添加模块路径到Python脚本
确认mysql.connector的安装路径,在本地CLI执行:
python3 -c "import mysql.connector; print(mysql.connector.__file__)"
提取路径中的父目录(例如输出为/usr/local/lib/python3.9/dist-packages/mysql/connector/__init__.py,则父目录为/usr/local/lib/python3.9/dist-packages),在Python脚本开头添加:
import sys sys.path.append("/usr/local/lib/python3.9/dist-packages")
3. 为PHP运行用户安装mysql-connector-python
PHP默认以www-data用户运行,而mysql-connector可能仅安装在当前用户环境中。切换到www-data用户重新安装模块:
sudo -u www-data pip3 install mysql-connector-python
4. 修正脚本的Shebang行
将脚本开头的#!/usr/bin/env python3替换为Python解释器的绝对路径(与步骤1中获取的路径一致),例如:
#!/usr/bin/python3
内容的提问来源于stack exchange,提问作者forenkema
相关产品推荐
相关产品推荐

