php exec 使用daemon用户 不同python环境的解决方案

本文探讨了在PHP中使用`exec`函数调用Python脚本时遇到的模块找不到问题。问题源于不同用户(daemon)拥有不同的Python环境。解决方案包括:1) 使用`sudo pip install`全局安装模块;2) 直接复制包文件夹至目标目录;3) 为daemon用户安装对应包。推荐使用`sudo`全局安装以避免环境差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在php中我们可以通过 exec 函数来调起系统的一些操作。我们可以通过一个简短的示例来演示:

我们在目录 /opt/lampp/htdocs/prediction2/api/test 下编写一个index.php,执行pwd命令
在这里插入图片描述
可以看到,命令顺利的执行了,我们获取了pwd执行的结果
在这里插入图片描述
可是我们需要执行一个python脚本的时候,却会报错,说无法找到安装的模组(后面的 2>&1 参数就是输出错误信息用的)

在这里插入图片描述
如图,显示找不到 bs4 模块
在这里插入图片描述
可是明明已经安装了对应的模块(在终端执行过 pip install),并且相同的命令,在远程登录的终端执行能够成功,这是为啥呢?

原因分析

找不到模块,但是上文也提到过,在终端执行相同的命令,可以成功,而在php的exec中执行,却找不到模块。猜测是执行的时候,用户不同。因为不同用户具有不同的python环境。

我们让php执行whoami命令
在这里插入图片描述
可以看到结果是 daemon 用户,即守护进程用户,而不是我们使用的ubuntu用户。
在这里插入图片描述
果然。不同的用户具有不同的python环境。。。接下来介绍一些解决的办法

解决方案

sudo pip install

当初安装的时候,没有使用sudu命令。那么bs4这个包就安装在我登录终端的用户上面了。其他用户并不共享这个python环境。

使用pip直接安装,那么这个包仅当前用户可用。而当我们使用 sudo pip install 的时候,则这个包是全局可用的

所以,以后为了方便起见,还是使用 sudo pip install 安装罢

直接复制包文件夹

简单粗暴。我们在windows系统下安装的python包,直接拷贝到云服务器上py文件运行的目录,即可运行(但是有时候会有警告信息)
在这里插入图片描述
注:windows下python的安装目录如下
在这里插入图片描述

为daemon用户也安装对应的包

我们直接在php调用exec执行 python3.7 -m pip install bs4 即可发起安装(还是推荐使用sudo全局安装。。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值