【问题标题】:ModuleNotFoundError: No module named 'gi' - While deploying in HerokuModuleNotFoundError: No module named 'gi' - 在 Heroku 中部署时
【发布时间】:2019-04-19 17:13:20
【问题描述】:

我正在 Heroku 中部署一个小型 Flask 应用程序并遇到此错误 - ModuleNotFoundError: No module named 'gi'

我的 Requirement.txt 使用 pip:

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'

【问题讨论】:

  • 您使用的是pip(与requirements.txt)还是Pipenv(与PipfilePipfile.lock)?请edit您的问题并添加您正在使用的任何依赖文件。
  • 嘿,克里斯,是的,我正在使用 pip 和 requirements.txt?你想让我在这里发布我的requirement.txt吗?
  • 是的,请将您的问题edit 粘贴到那里。使用 {} 按钮或 Ctrl+K 将其格式化为代码。
  • 完成。如有不便,请见谅。

标签: python heroku


【解决方案1】:

这里至少存在三个问题:

  1. 你依赖于vext,一个库

    在 virtualenv 中使用系统 python 包。

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

    vext 声称某些软件包不能以这种方式工作,但让它们在 virtualenv 中工作可能是一个更好的问题。

  2. vext.gi 专门设计用于

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

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

  3. 你也在使用playsound,一个

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

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

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

【讨论】:

  • 非常感谢 Chris 的时间和投入。我使用了 Vext,因为在多个地方都建议修复“gi”未找到问题。我将删除。对于 playsound 我完全同意这没有意义,我的主要目的是在提交 post/get 请求时在浏览器中播放声音。你能提出一些想法吗?
  • @ArjitSharma,您知道“gi not found”问题的根本原因吗?您是在代码的其他地方自己使用此模块,还是您的某个库依赖于它?同样,如果是针对 GTK3,我怀疑需要解决更大的架构问题。在浏览器中播放声音必须使用 JavaScript。请搜索教程并尝试您找到的内容。
  • 是的 - 这是由于 playsound - 他们使用 gi。 /app/.heroku/python/lib/python3.6/site-packages/playsound.py"."line 91" ------------------------ ------ 我知道,我必须在 Flask 中使用 Javascript 和 Websocket - 只是想避免,如果我能得到一个简单的解决方案。无论如何,非常感谢 :-)
猜你喜欢
  • 2020-09-26
  • 2020-09-12
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2022-11-11
相关资源
最近更新 更多