我正在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'
答案 0 :(得分:2)
这里至少有三个问题:
您依赖于vext
,该图书馆是
在virtualenv中使用系统python软件包。
您尝试使用的任何系统软件包很可能在Heroku上均不可用。您可以使用multiple buildpacks(包括apt
buildpack和Aptfile
)将它们作为Ubuntu软件包安装为Ubuntu软件包,但是仅将它们安装在virtualenv中可能更有意义。
vext
声称某些程序包不能很好地工作,但是让它们在virtualenv中工作可能是一个更好的问题。
vext.gi
专为
允许从virtualenv使用系统gi.repository(Gtk3)
GTK3是一个图形工具包,在Web主机上运行没有多大意义。我不确定您要使用它做什么,但是您可能必须重新考虑这种方法。
您还使用了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。