Python playound在IDLE中工作,但是在Thonny中给出“ no module named gi”错误。在Ubuntu终端中混合的结果

时间:2019-05-23 04:24:47

标签: python ubuntu playsound sys.path

我试图在python 3中使用playsound模块中的playsound函数。我从http://soundbible.com/1656-House-Fire-Alarm.html获得了火灾报警声音的mp3文件进行测试,并保存为siren1.mp3。

最小代码:


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

最初,我尝试在Thonny中运行最少的两行Python代码,但由于给出了“没有名为gi的模块”错误,因此无法正常工作。

这使我尝试了各种尝试,发现其中一些可行,而另一些却没有。因为我最终设法在Thonny赢得了演奏权,所以我的问题不是如何使演奏权发挥作用。

在stackoverflow上,我发现许多相关或类似的问题,形式为“ x在y上起作用而在z上不起作用”和“没有名为xx的模块”错误。作为一个相对较新的Python用户,我正在寻找有关如何理解python查找模块等所采用的不同路径的指南,具体取决于人如何执行python代码。

这是我做的实验和我的观察结果:

  1. 当我在Thonny(Thonny版本2.1.16,Python版本3.6.7,Tk版本8.6.8)中运行最小代码时,它失败并显示“ No module named gi”错误。

    < / li>
  2. 当我在IDLE(IDLE版本3.6.7,Python版本3.6.7,Tk版本8.6.8)中运行它时,相同的python程序可以正常工作,并且发出警笛声。

  3. 在Ubuntu(18.04)终端中,“ $ which python”显示为: / usr / bin / python

    $ python3 ./playSiren.py

    正确运行并发出声音

4。现在在命令提示符处执行python3

$ python3 

Python 3.6.7(默认,2018年10月22日,11:32:17) Linux上的[GCC 8.2.0]

现在,我复制并粘贴了两条python代码行并运行了它们 在python提示符下。 再次,代码正确运行并发出声音。

  1. 我在最少的代码中添加了一个shebang行,并将其更改为可执行文件,然后从Ubuntu提示符下运行它。

再次使代码正确运行并产生声音

  1. 我跑步时: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 in IDLE

/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

回溯(最近通话最近):   文件“”,第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
  1. 在Thonny上,我将以下内容附加到sys.path
    sys.path.append('/usr/lib/python3/dist-packages/gi/__init__.py')
    sys.path.append('/usr/lib/python3/dist-packages/gi/')

还是,我在Thonny上没有出现名为“ gi”的模块错误。

如果IDLE显示gi模块位于/usr/lib/python3/dist-packages/gi/__init__.py中,那么我希望Thonny在将它附加到sys.path时也能够找到gi。为什么不起作用?

然后我添加了以下内容:


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

现在,不再存在“没有名为'gi'的模块”错误,并且 正确播放声音会发出警笛声!!

2 个答案:

答案 0 :(得分:2)

我假设您已经从Thonny的主页安装了Thonny + Python捆绑包。在这种情况下,Thonny使用其自己的单独的Python解释器,该解释器具有其自己的包。

调整sys.path以包括另一个解释程序的软件包是不可靠的。它可能仅适用于Python包,但是如果其他解释器不同(例如3.6与3.7)并且该包(部分)是用C实现的,则它肯定不会起作用。

您应该为Thonny的Python安装所有必需的软件包(“工具=>管理软件包”将按用户安装它们,这意味着它们在相同版本的所有解释器之间共享),或者让Thonny使用您的系统解释器运行程序(工具=>选项=>解释器)。我推荐后者。

答案 1 :(得分:0)

来自官方link的用户,适用于ubuntu / debian用户

执行sudo apt install libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0以安装构建依赖项和GTK

执行pip3 install pycairo to build and install Pycairo

执行pip3 install PyGObject to build and install PyGObject