在Apache服务器运行Python脚本时遇ModuleNotFoundError: No module named 'boto3'
解决Apache下Python脚本无法找到boto3的问题
问题核心是执行环境不一致:命令行用的是登录用户(如ec2-user)的Python环境,而Apache运行CGI脚本时使用的是www-data(或apache)系统用户,两个环境的依赖包路径不共享。你通过pip3 install --user boto3安装的包仅属于登录用户,Apache用户无法访问。
以下是针对性解决方案:
方案1:给Apache用户的Python环境安装boto3
直接为Apache运行用户安装boto3,确保包在其可访问路径内:
- 执行命令:
sudo -u www-data pip3 install boto3
方案2:修正site-packages路径并授权
你当前指定的/.local/lib/python3.10/site-packages路径错误,应该指向登录用户的home目录下的.local路径(假设登录用户为ec2-user):
- 修改脚本中的路径:
import site site.addsitedir('/home/ec2-user/.local/lib/python3.10/site-packages')
- 赋予Apache用户读取该目录的权限:
sudo chmod -R o+rX /home/ec2-user/.local/lib/python3.10/site-packages
方案3:使用虚拟环境隔离依赖
创建独立的虚拟环境,避免环境冲突:
- 在网站目录下创建虚拟环境:
python3 -m venv /var/www/html/venv - 激活环境并安装boto3:
source /var/www/html/venv/bin/activate && pip install boto3 - 修改脚本的shebang行,指向虚拟环境的Python解释器:
#!/var/www/html/venv/bin/python3
- 确保Apache用户拥有虚拟环境目录的权限:
sudo chown -R www-data:www-data /var/www/html/venv
额外检查项
- 确认脚本shebang行的Python路径与命令行一致:执行
which python3获取路径,替换脚本开头的#!/usr/bin/python3。 - 检查Apache的CGI配置,确保允许执行Python脚本:在
apache2.conf或虚拟主机配置中添加/确认以下内容:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/ <Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Require all granted AddHandler cgi-script .py </Directory>
内容的提问来源于stack exchange,提问作者Jack Scallan
相关产品推荐
相关产品推荐

