Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python playsound在空闲状态下工作,但提供;没有名为“gi”的模块;Thonny中的错误;Ubuntu终端中的混合结果_Python_Ubuntu_Playsound_Sys.path - Fatal编程技术网

Python playsound在空闲状态下工作,但提供;没有名为“gi”的模块;Thonny中的错误;Ubuntu终端中的混合结果

Python playsound在空闲状态下工作,但提供;没有名为“gi”的模块;Thonny中的错误;Ubuntu终端中的混合结果,python,ubuntu,playsound,sys.path,Python,Ubuntu,Playsound,Sys.path,我试图使用Python3中playsound模块中的playsound函数。我从测试中获得了一个火警声音的mp3文件,并保存为siren1.mp3 最小代码: from playsound import playsound playsound('siren1.mp3') 最初,我试图在Thonny中运行最小的两行Python代码,但无法使其工作,因为它给出了“No module named gi”错误 这让我尝试了各种各样的方法,发现其中一些有效,而另一些无效。因为我最终设

我试图使用Python3中playsound模块中的playsound函数。我从测试中获得了一个火警声音的mp3文件,并保存为siren1.mp3

最小代码:


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

最初,我试图在Thonny中运行最小的两行Python代码,但无法使其工作,因为它给出了“No module named gi”错误

这让我尝试了各种各样的方法,发现其中一些有效,而另一些无效。因为我最终设法让playsound在Thonny工作,所以我的问题不是如何让playsound工作

在stackoverflow上,我发现了许多相关或类似的问题,如“x在y上工作,但在z上不工作”和“没有模块名为xx”错误。作为一个相对较新的Python用户,我需要的是关于如何理解Python查找模块所采用的不同路径的指导,这取决于执行Python代码的方式

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

  • 当我在Thonny(Thonny版本2.1.16、Python版本3.6.7、Tk版本8.6.8)中运行最小的代码时,它失败了,出现“没有名为gi的模块”错误

  • 当我在空闲状态(空闲版本3.6.7、python版本3.6.7、Tk版本8.6.8)下运行相同的python程序时,该程序工作正常,并播放了警报噪音

  • 在Ubuntu(18.04)终端中,“
    $whichpython
    ”显示: /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提示符上。 代码再次正确运行并发出声音

  • 我在最小代码中添加了一行shebang代码,并将其更改为可执行文件,然后在Ubuntu提示符下运行它
  • 代码再次正确运行并发出声音

  • 当我运行时:
    sudo apt get install python3 gi
  • 我得到的信息是: python3gi已经是最新版本(3.26.1-2ubuntu1)

    空闲时:

        >>> import gi
        >>> gi
    
    在Thonny:

        >>> 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
    
  • 在Thonny上,我将以下内容附加到sys.path
  • 不过,我在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'的模块”的错误了
    正确播放声音产生了警报声

    我假设您已经从Thonny的主页安装了Thonny+Python捆绑包。在本例中,Thonny使用自己独立的Python解释器,它有自己的包

    调整
    sys.path
    以包含其他解释器的包是不可靠的。它可能只适用于Python包,但如果另一个解释器是不同的(例如3.6 vs 3.7),并且包(部分)是用C实现的,它肯定不起作用


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

    我假设您已经从Thonny的主页安装了Thonny+Python包。在本例中,Thonny使用自己独立的Python解释器,它有自己的包

    调整
    sys.path
    以包含其他解释器的包是不可靠的。它可能只适用于Python包,但如果另一个解释器是不同的(例如3.6 vs 3.7),并且包(部分)是用C实现的,它肯定不起作用

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

    来自官方

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

    执行
    pip3安装pycairo以构建和安装pycairo

    执行
    pip3 install PyGObject,为ubuntu/debian用户从官方网站构建并安装PyGObject

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

    执行
    pip3安装pycairo以构建和安装pycairo


    执行
    pip3安装PyGObject来构建和安装PyGObject

    我使用了Thonny的管理软件包来安装playsound。但是managepackages找不到名为gi的模块。然而,正如您所建议的,当我使用Tool=>Options=>interpreter选择解释器时,playsound确实可以正常工作,而无需调整sys.path。谢谢。我用Thonny的管理软件包安装了playsound。但是managepackages找不到名为gi的模块。然而,正如您所建议的,当我使用Tool=>Options=>interpreter选择解释器时,playsound确实可以正常工作,而无需调整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
    
        sys.path.append('/usr/lib/python3/dist-packages/gi/__init__.py')
        sys.path.append('/usr/lib/python3/dist-packages/gi/')
    
    
        sys.path.append("/usr/lib/python3/dist-packages")