Проигрывание Python работает в IDLE, но выдает ошибку «нет модуля с именем gi» в Thonny; смешанный результат в терминале Ubuntu - PullRequest
1 голос
/ 23 мая 2019

Я пытался использовать функцию playsound из модуля playsound в python 3. Я получил mp3-файл звукового сигнала пожарной тревоги от http://soundbible.com/1656-House-Fire-Alarm.html для тестирования и сохранил его как siren1.mp3.

Минимальный код:


    from playsound import playsound
    playsound('siren1.mp3')

Изначально я попытался запустить минимальный двухстрочный код Python в Thonny и не смог заставить его работать, так как он выдал «Нет модуля с именем gi»ошибка.

Это заставило меня попробовать разные вещи, обнаружив, что некоторые из них работают, а другие нет.Поскольку мне в итоге удалось заставить PlaySound работать в Thonny, мой вопрос не в том, как заставить PlaySound работать.

В стеке потока я нахожу много связанных или похожих вопросов в форме «x работает на y, но не на z» и «Нет модуля с именем xx».Как относительно новый пользователь Python, я ищу инструкции о том, как понять различные пути, по которым Python ищет модули и т. Д., В зависимости от того, как выполняется код Python.

Вот эксперименты, которые я провели мои наблюдения:

  1. Когда я запустил минимальный код в Thonny (Thonny версия 2.1.16, Python версия 3.6.7, Tk версия 8.6.8), произошел сбой при отсутствии модуляnamed gi "error.

  2. Та же самая программа на python работала правильно, когда я запустил ее в IDLE (IDLE версии 3.6.7, Python версии 3.6.7, Tk версии 8.6.8) и сиренеШум воспроизводился.

  3. В терминале Ubuntu (18.04) «$ which python» показывал: / usr / bin / python

    $ python3 ./playSiren.py

    работал правильно и воспроизводил звук

4. Теперь запустил python3 в командной строке

$ python3 

Python 3.6.7 (по умолчанию, 22 октября 2018 г., 11:32:17) [GCC 8.2.0] в Linux

Теперь я скопировал и вставил две строки кода Python и запустилм в приглашении Python.Снова код работает правильно и производит звук.

Я добавил строку shebang к минимальному коду и изменил ее на исполняемый файл, а затем запустил его из приглашения Ubuntu.

Снова код запустился правильно и издал звук

Когда я запускаю: sudo apt-get install python3-gi,

Я получаю сообщение: python3-gi уже является самой новой версией (3.26.1-2ubuntu1).

В IDLE:

    >>> import gi
    >>> gi
<module 'gi' from '/usr/lib/python3/dist-packages/gi/__init__.py'>

sys.path в режиме бездействия

/home/pi/.local/lib/python3.6/site-packages
/home/pi/Python Learning
/usr/bin
/usr/lib/python3.6
/usr/lib/python3.6/lib-dynload
/usr/lib/python3/dist-packages
/usr/lib/python36.zip
/usr/local/lib/python3.6/dist-packages

в тоннах:

    >>> import gi

Traceback (последний вызов был последним): файл "",строка 1, в ModuleNotFoundError: нет модуля с именем 'gi'

sys.path в Thonny:

/home/pi/.thonny/Python36/lib/python3.6/site-packages
/home/pi/.thonny/jedi_0.11.1
/home/pi/Python Learning
/usr/lib/python3.6
/usr/lib/python3.6/lib-dynload
/usr/lib/python3/dist-packages/thonny/shared
/usr/lib/python36.zip
В Thonny я добавил следующее к sys.path
    sys.path.append('/usr/lib/python3/dist-packages/gi/__init__.py')
    sys.path.append('/usr/lib/python3/dist-packages/gi/')

Тем не менее, я получаю сообщение Нет модуль с именем 'gi' в Thonny.

Если IDLE показываетМодуль gi находится в /usr/lib/python3/dist-packages/gi/__init__.py, я ожидал, что Тонни также сможет найти gi, когда добавлю его в sys.path.Почему это не сработало?

Затем я добавил следующее:


    sys.path.append("/usr/lib/python3/dist-packages")

Теперь больше не было ошибки «Нет модуля с именем« gi »», и воспроизведение звука правильно производило звук сирены..!

1 Ответ

2 голосов
/ 23 мая 2019

Полагаю, вы установили пакет Thonny + Python с домашней страницы Thonny. В этом случае Тонни использует свой отдельный интерпретатор Python, который имеет свои собственные пакеты.

Настройка sys.path для включения пакетов другого переводчика не является надежным. Он может работать для пакетов только на Python, но определенно не будет работать, если другой интерпретатор отличается (например, 3.6 против 3.7), и пакет (частично) реализован в C.

Вы должны либо установить все необходимые пакеты для Thonny's Python («Инструменты => Управление пакетами» установят их для каждого пользователя, что означает, что они являются общими для всех интерпретаторов одной версии), либо вы заставите Thonny использовать свой системный интерпретатор для запуска программы (Инструменты => Параметры => Интерпретатор). Я рекомендую последнее.

...