我试图使用Python 3中playsound模块中的playsound函数。我从http://soundbible.com/1656-House-Fire-Alarm.html获得了火警声音的mp3文件。进行测试并保存为 Siren1.mp3。
最少代码:
from playsound import playsound
playsound('siren1.mp3')
最初,我尝试在 Thonny 中运行最少的 2 行 Python 代码,但无法让它工作,因为它给出了“No module named gi”错误。
这让我尝试了各种方法,发现其中一些有效,而另一些则无效。因为我最终设法让 Playsound 在 Thonny 中工作,所以我的问题不是如何让 PlaySound 工作。
在 Stack Overflow 上,我发现许多相关或类似的问题,其形式为“x 适用于 y 但不适用于 z”和“没有名为 xx 的模块”错误。作为一个相对较新的 Python 用户,我正在寻找的是如何理解 Python 寻找模块等的不同路径的指导,具体取决于执行 Python 代码的方式。
以下是我所做的实验和我的观察:
当我在 Thonny 中运行最小代码(Thonny 版本 2.1.16、Python 版本 3.6.7、Tk 版本 8.6.8)时,它失败并出现“没有名为 gi 的模块”错误。
当我在 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
运行正确并发出声音
现在在命令提示符下执行 python3
$ python3
Python 3.6.7(默认,2018 年 10 月 22 日,11:32:17) Linux 上的 [GCC 8.2.0]
现在我复制并粘贴了两行 Python 代码并运行它们 在 Python 提示符下。 代码再次正确运行并发出声音。
- 我在最小代码中添加了一个 shebang 行,并将其更改为可执行文件,然后从 Ubuntu 提示符下运行它。
代码再次正确运行并产生声音
- 当我运行时:
sudo apt-get install python3-gi
,
我收到消息:
python3-gi is already the newest version (3.26.1-2ubuntu1).
空闲时:
>>> import gi
>>> gi
<module 'gi' from '/usr/lib/python3/dist-packages/gi/__init__.py'>
IDLE 中的 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 (most recent call last):
File "<pyshell>", line 1, in <module>
ModuleNotFoundError: No module named 'gi'
Thonny 中的 sys.path
:
/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/')
尽管如此,我在 Thonny 上遇到了 No module named 'gi'
错误。
如果 IDLE 显示 gi 模块位于 /usr/lib/python3/dist-packages/gi/__init__.py
中,我希望当我将其附加到时,Thonny 也能够找到 gi sys.path
。为什么没有成功?
然后我附加了以下内容:
sys.path.append("/usr/lib/python3/dist-packages")
现在,不再出现“没有名为 'gi' 的模块”错误 播放声音正确产生警笛声!
最佳答案
我假设您已经从 Thonny 的主页安装了 Thonny+Python bundle 。在本例中,Thonny 使用自己独立的 Python 解释器,该解释器有自己的包。
调整sys.path
以包含另一个解释器的包是不可靠的。它可能适用于仅 Python 的包,但如果其他解释器不同(例如 3.6 与 3.7)并且该包(部分)用 C 实现,则它肯定不起作用。
您应该安装 Thonny 的 Python 所需的所有软件包(“工具 => 管理软件包”将为每个用户安装它们,这意味着它们在同一版本的所有解释器之间共享),或者让 Thonny 使用您的系统解释器来运行程序(工具=>选项=>解释器)。我推荐后者。
关于Python 在 IDLE 中播放声音,但在 Thonny 中给出 "no module called gi"错误; Ubuntu 终端中的混合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56268043/