ModuleNotFoundError:没有名为“ gi”的模块-在Heroku中部署时

时间:2019-04-19 17:13:20

标签: python heroku

我正在Heroku中部署一个小的Flask应用程序并遇到此错误-ModuleNotFoundError:没有名为'gi'的模块

我的Requirement.txt使用点子:

certifi==2019.3.9
chardet==3.0.4
Click==7.0
Flask==1.0.2
gunicorn==19.9.0
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
playsound==1.2.2
requests==2.21.0
ruamel.yaml==0.15.92
urllib3==1.24.2
vext==0.7.3
vext.gi==0.7.0
Werkzeug==0.15.2
pgi==0.0.10.1

我的实际代码:

from flask import render_template
import requests
from playsound import playsound
from app import app

@app.route('/')
@app.route('/index',methods=['GET'])
def index():
    counter = 1
    user = {'username': 'Mr Test'}
    playsound('audio.mp3')
    return render_template('index.html', title='Home', user=user)

错误消息:

2019-04-19T17:52:05.415693+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/playsound.py", line 91, in _playsoundNix
2019-04-19T17:52:05.415694+00:00 app[web.1]: import gi
2019-04-19T17:52:05.415695+00:00 app[web.1]: ModuleNotFoundError: No module named 'gi'

2 个答案:

答案 0 :(得分:2)

这里至少有三个问题:

  1. 您依赖于vext,该图书馆是

      

    在virtualenv中使用系统python软件包。

    您尝试使用的任何系统软件包很可能在Heroku上均不可用。您可以使用multiple buildpacks(包括apt buildpackAptfile)将它们作为Ubuntu软件包安装为Ubuntu软件包,但是仅将它们安装在virtualenv中可能更有意义。

    vext声称某些程序包不能很好地工作,但是让它们在virtualenv中工作可能是一个更好的问题。

  2. vext.gi专为

      

    允许从virtualenv使用系统gi.repository(Gtk3)

    GTK3是一个图形工具包,在Web主机上运行没有多大意义。我不确定您要使用它做什么,但是您可能必须重新考虑这种方法。

  3. 您还使用了playsound

      

    纯Python,跨平台,单功能模块,不依赖于播放声音

    这在Heroku上也没有多大意义。 playsound似乎可以在您的本地计算机上运行,​​但这仅仅是因为您的服务器与浏览器在同一台计算机上运行。 playsound在Heroku上可能根本无法使用,但如果这样做,它将在Amazon数据中心的某些服务器上播放声音。您将听不到。

    与GTK3一样,您将不得不重新考虑应用程序的这一部分。

答案 1 :(得分:0)

您的系统似乎缺少python3-gi软件包。尝试为GObject Introspection库安装Python绑定。

对于Ubuntu / Python3

sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0

有关更多信息,请参见PyGObject documentation