我试图在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代码。
这是我做的实验和我的观察结果:
当我在Thonny(Thonny版本2.1.16,Python版本3.6.7,Tk版本8.6.8)中运行最小代码时,它失败并显示“ No module named gi”错误。
< / li>当我在IDLE(IDLE版本3.6.7,Python版本3.6.7,Tk版本8.6.8)中运行它时,相同的python程序可以正常工作,并且发出警笛声。
在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提示符下。 再次,代码正确运行并发出声音。
再次使代码正确运行并产生声音
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
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'的模块”错误,并且 正确播放声音会发出警笛声!!
答案 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