Django以服务运行时pyhtml2pdf报NoneType无split属性错误求助
问题分析与解决
问题根源
报错'NoneType' object has no attribute 'split'出现在webdriver_manager的chrome.py文件中,本质是systemd服务环境下找不到Chrome浏览器的可执行文件,导致webdriver_manager无法获取Chrome版本信息,返回None值引发split操作失败。
同时你的systemd服务配置存在两处明显问题:
Environment="PATH=/var/www/myProject/env/bin/activate"配置错误,PATH应指向目录而非activate脚本文件- 使用
source activate的方式在systemd中不够可靠,systemd的执行环境和用户shell环境差异较大
解决方案
1. 修正systemd服务配置
修改/etc/systemd/system/myProject.service文件,调整内容如下:
[Unit] Description=myProject_0 project After=network.target [Service] User=root Group=root WorkingDirectory=/var/www/myProject # 正确设置PATH:包含虚拟环境bin目录+系统默认路径,确保能找到Chrome和虚拟环境的python Environment="PATH=/var/www/myProject/env/bin:/usr/bin:/bin" # 直接使用虚拟环境的python执行,无需source激活,更稳定 ExecStart=/var/www/myProject/env/bin/python manage.py runserver StandardOutput=append:/var/log/myProject/myProject.log StandardError=append:/var/log/myProject/myProject_error.log [Install] WantedBy=multi-user.target
修改后重新加载systemd配置并重启服务:
systemctl daemon-reload systemctl restart myProject.service
2. 确保Chrome在systemd环境中可访问
如果调整服务配置后仍报错,先确认Chrome的安装路径:
which google-chrome
得到路径(比如/usr/bin/google-chrome)后,可通过两种方式指定:
方式一:在systemd服务中添加Chrome路径环境变量
在[Service]段新增配置:
Environment="CHROME_BIN=/usr/bin/google-chrome"
方式二:在代码中直接指定Chrome路径
在调用pyhtml2pdf的代码里明确传入Chrome二进制文件路径:
from pyhtml2pdf import converter # 替换为你的Chrome实际路径 converter.convert( source='path/to/input.html', target='path/to/output.pdf', chrome_path='/usr/bin/google-chrome' )
3. 验证配置
重启服务后测试HTML转PDF功能,查看错误日志确认问题是否解决:
cat /var/log/myProject/myProject_error.log
内容的提问来源于stack exchange,提问作者anjanesh
相关产品推荐
相关产品推荐

