Laravel控制器运行Python脚本报错及依赖问题求助
解决Laravel中Symfony Process调用Python脚本的两个问题
看起来你碰到了两个典型的Python环境配置问题,咱们一步步来解决:
一、解决python命令找不到的问题(Exit Code 127)
报错里的sh: 1: python: not found说明你的服务器系统里没有把python命令映射到Python解释器——现在大多数Linux发行版默认只安装Python3,并且只有python3命令可用。
你有两个解决方向:
- 直接改用
python3命令(最稳妥,不会影响系统其他程序):
把控制器里的代码改成:
你已经试过这个能运行简单脚本,所以这个是最快的临时解决办法。$process = new Process('python3 '.public_path('MyPython.py')); - 给
python创建软链接到python3(让python命令可用):
登录服务器,运行以下命令(需要sudo权限):
这样系统里的sudo ln -s /usr/bin/python3 /usr/bin/pythonpython命令就会指向Python3了。注意:如果你的服务器上还有依赖Python2的老程序,这个操作可能会影响它们,所以谨慎使用。
二、解决requests模块找不到的问题(ModuleNotFoundError)
这个错误是因为你运行脚本的Python3环境里没有安装requests库。这里要注意:服务器上可能有多个Python环境,你得确保安装库的环境和运行脚本的是同一个。
步骤1:确认运行脚本的Python3路径
先在Laravel控制器里加一段代码,查清楚你调用的python3到底是哪个路径:
$process = new Process('which python3'); $process->run(); Log::info($process->getOutput());
运行后看日志,会得到类似/usr/bin/python3的路径。
步骤2:用对应路径的pip安装requests
根据上面得到的路径,运行服务器命令安装requests:
# 替换成你查到的python3路径 sudo /usr/bin/python3 -m pip install requests
这样安装的requests就会被你调用的Python3环境识别到。
额外注意:修复Python脚本里的拼写错误
你的Python脚本里有个低级错误,会导致即使装了requests还是报错:
# 错误写法:request.get(url) response = requests.get(URL); # 要改成requests(复数),并且变量是大写的URL
把这个错误修正,脚本才能正常发送请求。
内容的提问来源于stack exchange,提问作者Toti Cuervo
相关产品推荐
相关产品推荐

