Python playsound 在 IDLE 中有效,但在 Thonny 中给出 "no module called gi" 错误; Ubuntu 终端中的混合结果
Python playsound works in IDLE but gives "no module called gi" error in Thonny; mixed result in Ubuntu terminal
我试图使用Python中playsound模块的playsound功能 3.我从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 works on y but not on z”和“No module named xx”错误。作为一个相对较新的 Python 用户,我正在寻找的是关于如何理解 Python 根据执行 Python 代码的方式寻找模块等所采用的不同路径的指导。
以下是我所做的实验和我的观察:
当我运行 Thonny 中的最小代码(Thonny 版本 2.1.16,Python 版本 3.6.7,Tk 版本 8.6.8)时,它失败了“没有名为 gi 的模块”错误。
相同的 Python 程序在我 运行 IDLE 时正常工作(IDLE 版本 3.6.7,Python 版本 3.6.7,Tk 版本 8.6 .8) 并播放了警笛声。
在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'>
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'
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/')
不过,我在 Thonny 上遇到 No module named 'gi'
错误。
如果 IDLE 显示 gi 模块在 /usr/lib/python3/dist-packages/gi/__init__.py
中,我希望 Thonny 在将其附加到 sys.path
时也能找到 gi。为什么它不起作用?
然后我附加了以下内容:
sys.path.append("/usr/lib/python3/dist-packages")
现在,不再有“No module named 'gi'”错误,并且
正确播放声音产生了警笛声!
我假设您已经从 Thonny 的主页安装了 Thonny+Python 包。在这种情况下,Thonny 使用自己的独立 Python 解释器,它有自己的包。
调整 sys.path
以包含另一个解释器的包,这是不可靠的。它可能适用于 Python-only 包,但如果其他解释器不同(例如 3.6 与 3.7)并且包(部分)在 C 中实现,则它肯定不会工作。
您应该为 Thonny 的 Python 安装所有必需的包("Tools => Manage packages" 会安装它们 per-user,这意味着它们在相同版本的所有解释器之间共享)或者您使 Thonny将您的系统解释器用于 运行 程序(工具 => 选项 => 解释器)。我推荐后者。
来自官方 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
我试图使用Python中playsound模块的playsound功能 3.我从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 works on y but not on z”和“No module named xx”错误。作为一个相对较新的 Python 用户,我正在寻找的是关于如何理解 Python 根据执行 Python 代码的方式寻找模块等所采用的不同路径的指导。
以下是我所做的实验和我的观察:
当我运行 Thonny 中的最小代码(Thonny 版本 2.1.16,Python 版本 3.6.7,Tk 版本 8.6.8)时,它失败了“没有名为 gi 的模块”错误。
相同的 Python 程序在我 运行 IDLE 时正常工作(IDLE 版本 3.6.7,Python 版本 3.6.7,Tk 版本 8.6 .8) 并播放了警笛声。
在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'>
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'
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/')
不过,我在 Thonny 上遇到 No module named 'gi'
错误。
如果 IDLE 显示 gi 模块在 /usr/lib/python3/dist-packages/gi/__init__.py
中,我希望 Thonny 在将其附加到 sys.path
时也能找到 gi。为什么它不起作用?
然后我附加了以下内容:
sys.path.append("/usr/lib/python3/dist-packages")
现在,不再有“No module named 'gi'”错误,并且 正确播放声音产生了警笛声!
我假设您已经从 Thonny 的主页安装了 Thonny+Python 包。在这种情况下,Thonny 使用自己的独立 Python 解释器,它有自己的包。
调整 sys.path
以包含另一个解释器的包,这是不可靠的。它可能适用于 Python-only 包,但如果其他解释器不同(例如 3.6 与 3.7)并且包(部分)在 C 中实现,则它肯定不会工作。
您应该为 Thonny 的 Python 安装所有必需的包("Tools => Manage packages" 会安装它们 per-user,这意味着它们在相同版本的所有解释器之间共享)或者您使 Thonny将您的系统解释器用于 运行 程序(工具 => 选项 => 解释器)。我推荐后者。
来自官方 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