Python3已安装dbus却无法导入的问题求助
解决Python3.6无法导入dbus模块的问题
这种情况我之前折腾过好几次,核心问题基本都是Python3的dbus模块没装对对应环境——毕竟Python2和Python3的包管理是完全独立的,系统自带的Python2能正常用,不代表Python3的环境就自动配置好了。给你几个一步步排查的方案:
第一步:确认Python3的包搜索路径
先搞清楚你的/usr/local/bin/python3到底会读取哪些路径下的包,运行这条命令:
/usr/local/bin/python3 -c "import site; print(site.getsitepackages())"
输出的路径就是这个Python3版本默认的包目录,你可以手动去这些目录里看看有没有dbus或者dbus-python相关的文件夹——如果没有,那就是模块根本没装到这个环境里。
第二步:用对应版本的pip安装正确的包
注意!Python3里的dbus相关包名不是dbus,而是dbus-python,而且必须用你这个/usr/local/bin/python3对应的pip来安装,不然很容易装到系统默认的Python3环境里(和你当前用的不是同一个)。运行这条命令:
/usr/local/bin/pip3 install dbus-python
如果安装过程中报错,大概率是缺少系统级的依赖库,先补装依赖:
针对Debian/Ubuntu系统:
sudo apt-get install libdbus-1-dev libglib2.0-dev
装完依赖再重新运行上面的pip安装命令。
第三步:排查虚拟环境干扰
如果你之前用过虚拟环境,有可能dbus模块被装到了某个虚拟环境里,而你现在用的是全局的/usr/local/bin/python3。这时候要么激活对应的虚拟环境再运行代码,要么用上面的命令在全局环境里重新装一次dbus-python。
为什么Python2能正常用?
因为Python2的dbus模块通常是系统默认预装的,或者你用系统的pip2安装的,它和Python3的包环境完全隔离,所以两者互不影响——Python2能用,不代表Python3的环境就自动配置好了。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

