Laravel使用Symfony Process调用Python报_Py_HashRandomization_Init错误如何解决
错误原因
你遇到的Python初始化报错核心是Web服务运行时的环境变量缺失:Windows平台下Python初始化需要读取SYSTEMROOT环境变量调用系统接口生成随机数,命令行执行时会继承当前登录用户的环境变量所以正常运行,而Web服务(Apache/Nginx/PHP-FPM)运行时默认会裁剪环境变量避免安全风险,因此触发_Py_HashRandomization_Init初始化失败。
修复方案
1. 显式为Process传入系统环境变量(推荐)
直接在实例化Process后补充传递SYSTEMROOT变量,修改后的控制器代码如下:
use Symfony\Component\Process\Process; use Symfony\Component\Process\Exception\ProcessFailedException; public function plagiarismCheck() { $process = new Process(['C:/Program Files/Python39/python.exe', 'C:/Users/User/Desktop/www/abyss-hub/public/helloads.py']); // 传入Windows系统必填环境变量 $process->setEnv([ 'SYSTEMROOT' => getenv('SYSTEMROOT') ?: 'C:\\Windows' ]); $process->run(); if (!$process->isSuccessful()) { throw new ProcessFailedException($process); } return $process->getOutput(); }
2. 全局配置PHP继承系统环境变量
如果需要多次调用Python脚本,可以修改PHP配置避免每次传参:
- 编辑
php.ini,找到variables_order配置项,确保值包含E(即开启环境变量读取),示例:variables_order = "EGPCS" - 若使用Nginx+PHP-FPM,可在
fastcgi_params配置文件中添加一行:fastcgi_param SYSTEMROOT $env(SYSTEMROOT);,重启服务后生效
可选排查项
- 确认Web服务运行用户(如IIS的IUSR、Apache的apache用户)对Python安装目录、脚本存放目录有读取和执行权限
- 确认Python路径、脚本路径无中文或特殊字符,避免路径解析异常
内容的提问来源于stack exchange,提问作者Jeyhun Rashidov
相关产品推荐
相关产品推荐

