Python 3.6.4导入dbus报错求助:添加sys.path后问题仍未解决
哇,这折腾得够惨的——误删dbus重装系统还没搞定,太闹心了。咱们一步步排查,应该能解决这个导入问题:
1. 先明确你当前在用哪个Python版本
你源码安装了Python3.6.4,而系统自带的Python版本可能和它不一样,python3-dbus是针对系统自带Python打包的,源码安装的Python根本找不到这个包。先确认当前终端用的是哪个Python:
which python3 python3 --version
如果输出的是/usr/local/bin/python3和3.6.4,说明你在用源码编译的版本;如果是/usr/bin/python3,那是系统自带的。
2. 针对源码安装的Python,手动安装dbus-python
系统的python3-dbus不兼容源码编译的Python,你需要给这个3.6.4版本单独安装dbus的绑定包:
- 先安装编译依赖:
sudo apt install libdbus-1-dev libglib2.0-dev
- 用对应版本的pip安装dbus-python:
pip3.6 install dbus-python
(如果pip3.6不存在,先给源码Python装pip:curl https://bootstrap.pypa.io/pip/3.6/get-pip.py | sudo python3.6)
3. 检查sys.path的有效性
你之前添加的/usr/lib/python3/dist-packages是系统Python的包路径,源码Python加载这个路径里的dbus模块可能会因为版本不兼容报错。可以在Python里打印当前的sys.path确认:
import sys print(sys.path)
如果源码Python的sys.path里有系统的dist-packages路径,建议去掉它(避免版本冲突),确保dbus-python装在了源码Python的site-packages目录下(一般是/usr/local/lib/python3.6/site-packages)。
4. 如果想用系统自带的Python,彻底修复依赖
如果你不想用源码的Python,换回系统自带的版本,先修复dbus和python3-dbus的依赖:
sudo apt install --reinstall dbus python3-dbus
然后直接用/usr/bin/python3运行脚本,不要用源码的python3。
5. 确认dbus服务正常运行
有时候导入失败不是包的问题,是dbus服务没启动。检查服务状态:
systemctl status dbus
如果显示inactive,启动它:
sudo systemctl start dbus
内容的提问来源于stack exchange,提问作者Jeremy

