проблема с питоном dbus

У меня проблема с dbus и python. Запуск python из командной строки с указанием import dbus, а затем systembus = dbus.SystemBus() не приводит к ошибкам, равно как и запуск программы, написанной другом, которая также использует точно такой же код. Однако при запуске программы, которую я пытаюсь написать, я получаю эту ошибку:

Traceback (most recent call last):
  File "dbtest.py", line 26, in <module>
    a = getDevs()
  File "dbtest.py", line 7, in getDevs
    bus = dbus.SystemBus()
AttributeError: 'module' object has no attribute 'SystemBus'

Любые идеи относительно того, что я делаю неправильно? Я не думаю, что полностью понимаю возвращенную ошибку. Код, который у меня есть до сих пор:

#!/usr/bin/env python
import dbus

def getDevs():
        bus = dbus.SystemBus()

if __name__ == "__main__":
        a = getDevs()

person EricR    schedule 20.07.2010    source источник


Ответы (1)


Очевидная проблема заключается в том, что когда вы импортируете dbus, он получает не все методы.

Как в вашей программе, так и в программе вашего друга выполните print dbus.__file__. Это покажет, какой .pyc он использует. Если они разные, вы импортируете не тот модуль dbus.

Я собираюсь предположить, что вы на самом деле импортируете какой-то случайный файл с именем dbus.py в свой локальный каталог. Или, если имя вашего скрипта «dbus.py», вы просто импортируете себя, и, к счастью, python не импортирует рекурсивно. Самое простое решение в этом случае — переименовать файл-нарушитель во что-то другое.

person Donald Miner    schedule 20.07.2010
comment
Предполагая, что это так (скрипт с именем dbus.py), имейте в виду, что по этой причине плохой практикой является называть ваш скрипт так же, как модуль, из которого вы импортируете. Python всегда будет сначала пытаться импортировать из относительных путей, например. текущий рабочий каталог. - person jathanism; 20.07.2010
comment
OMG Я боролся полчаса над этим. Спасибо, ребята :D - person netom; 10.02.2011