CPanel中PHP调用Python脚本遇内部服务器错误求助
解决CPanel中PHP执行Python脚本找不到虚拟环境模块的问题
问题原因
PHP执行shell命令时,默认调用系统全局的Python解释器,而你安装的yake、readability等模块仅存在于CPanel创建的虚拟环境中,全局Python无法访问这些模块,因此出现ModuleNotFoundError。终端中激活虚拟环境后能正常运行,是因为激活操作修改了环境变量,让python命令指向虚拟环境的解释器。
解决方案
方案1:直接使用虚拟环境的Python路径执行脚本
修改PHP代码中的python命令为虚拟环境的Python绝对路径,这样会直接使用虚拟环境的解释器,自动加载其中的模块:
<?php $command = escapeshellcmd('/home/mesuivln/virtualenv/seopython/3.7/bin/python /home/mesuivln/seopython/h1parser.py'); $output = shell_exec($command); echo $output; ?>
方案2:切换目录后使用虚拟环境Python执行(若脚本依赖相对路径)
如果你的Python脚本中有相对路径引用,需要先切换到脚本所在目录,再执行:
<?php $command = escapeshellcmd('cd /home/mesuivln/seopython && /home/mesuivln/virtualenv/seopython/3.7/bin/python h1parser.py'); $output = shell_exec($command); echo $output; ?>
方案3:给Python脚本添加shebang并设置执行权限
- 在
h1parser.py的第一行添加虚拟环境Python的shebang:
#!/home/mesuivln/virtualenv/seopython/3.7/bin/python
- 通过CPanel终端给脚本添加执行权限:
chmod +x /home/mesuivln/seopython/h1parser.py
- 修改PHP代码直接执行脚本:
<?php $command = escapeshellcmd('/home/mesuivln/seopython/h1parser.py'); $output = shell_exec($command); echo $output; ?>
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

