Python C模块报错:module 'Onboard.osk' has no attribute 'Util'求助
问题:构建旧Python项目时出现AttributeError错误
尝试构建一个旧项目时,执行./setup.py build出现如下警告:
WARNING: the following files are not recognized by DistUtilsExtra.auto: <the list of .c/.h files in Onboard/osk/>
运行./onboard时触发报错:
Traceback (most recent call last): File "/home/....../onboard/./onboard", line 35, in <module> from Onboard.OnboardGtk import OnboardGtk as Onboard File "/home/....../onboard/Onboard/OnboardGtk.py", line 48, in <module> from Onboard.Keyboard import Keyboard File "/home/....../onboard/Onboard/Keyboard.py", line 45, in <module> from Onboard.KeyboardPopups import TouchFeedback File "/home/....../onboard/Onboard/KeyboardPopups.py", line 256, in <module> class LabelPopup(KeyboardPopupDrawable): File "/home/....../onboard/Onboard/KeyboardPopups.py", line 264, in LabelPopup _osk_util = osk.Util() AttributeError: module 'Onboard.osk' has no attribute 'Util'
从未接触过Python C模块,请问该错误产生的原因是什么?
错误原因分析
这两个问题直接相关:
- 警告里提到的
Onboard/osk/下的.c/.h文件是Python C扩展模块的源码——这类模块用C语言编写,用来提升性能或调用系统底层接口,必须通过setup.py编译成二进制文件(如.so)才能被Python加载使用。 - 构建时的警告说明
DistUtilsExtra.auto工具未识别到这些C源码文件,导致对应的Onboard.osk模块完全没有被编译。当Python代码尝试调用osk.Util()时,加载的osk模块是空的,自然找不到Util属性,触发AttributeError。
具体诱因:
- 旧项目依赖的
DistUtilsExtra工具版本和项目预期不匹配,该工具对C扩展文件的识别规则发生了变化,无法自动处理Onboard/osk/下的源码。 - 也可能缺少编译C扩展的基础依赖(如GCC编译器、Python开发头文件包),但这里先出现了文件未被识别的警告,核心问题还是构建流程没正确触发C模块的编译。
内容的提问来源于stack exchange,提问作者Alex P.
相关产品推荐
相关产品推荐

