通过PHP执行Python脚本时导入Selenium WebDriver报错求助
解决PHP执行Python脚本时找不到Selenium模块的问题
我来帮你排查这个问题——这个报错的核心原因是PHP执行sudo切换到www-data用户时,使用的Python环境和你直接在bash里用的不是同一个,导致selenium模块不在www-data用户的Python搜索路径里。下面是几个可行的解决方案:
1. 指定Python的绝对路径
首先在你的bash终端里运行以下命令,找到你安装了selenium的Python版本的绝对路径:
which python # 或者用 which python3,根据你实际使用的版本
比如输出可能是 /usr/local/bin/python3,然后修改PHP脚本里的命令,把python替换成这个绝对路径:
$dir = __DIR__; # 替换成你找到的Python绝对路径 $command = "sudo -u www-data /usr/local/bin/python3 ".$dir."/script.py 2>&1"; $pid = popen( $command,"r"); while( !feof( $pid ) ) { echo fread($pid, 256); flush(); ob_flush(); usleep(200000); } pclose($pid);
这样就能确保www-data用户调用的是你安装了selenium的那个Python环境。
2. 为www-data用户安装Selenium
如果你希望直接让www-data的Python环境拥有selenium模块,可以切换到www-data用户身份执行安装命令:
sudo -u www-data pip install selenium # 如果是Python3,用 pip3 sudo -u www-data pip3 install selenium
执行完成后,再通过PHP运行脚本应该就能找到selenium模块了。
3. 给Python脚本添加Shebang行并设置执行权限
在你的Python脚本开头添加一行shebang,指定正确的Python路径:
#!/usr/local/bin/python3 # 替换成你找到的Python绝对路径 from selenium import webdriver import time import os import os.path # 其他脚本内容...
然后给脚本添加执行权限:
chmod +x /var/www/html/spreadsheet/script.py
之后PHP里的命令可以简化为:
$command = "sudo -u www-data ".$dir."/script.py 2>&1";
为什么直接在bash里运行正常?
因为你直接在bash中运行时,使用的是当前登录用户的Python环境,这个环境已经安装了selenium;而PHP通过sudo切换到www-data用户后,加载的是www-data用户的环境变量和Python路径,这个环境里默认没有安装selenium,或者调用的Python版本和你常用的不一样。
内容的提问来源于stack exchange,提问作者Hassaan
相关产品推荐
相关产品推荐

