首页 > 解决方案 > 在 Ubuntu docker 上运行 Kivy hello world - egl_rpi - ImportError: cannot import name 'bcm'

问题描述

Dockerfile

#Main docker image
FROM ubuntu:18.04

# Install necessary system packages
RUN apt-get update
RUN apt-get install -y \
    python3-pip \
    build-essential \
    git \
    python3.7 \
    python3-dev \
    ffmpeg \
    libsdl2-dev \
    libsdl2-image-dev \
    libsdl2-mixer-dev \
    libsdl2-ttf-dev \
    libportmidi-dev \
    libswscale-dev \
    libavformat-dev \
    libavcodec-dev \
    zlib1g-dev \
    pkg-config \
    libmtdev1

   # Install gstreamer for audio, video (optional)
RUN apt-get install -y \
    libgstreamer1.0 \
    gstreamer1.0-plugins-base \
    gstreamer1.0-plugins-good


ADD ./requirements.pip requirements.pip

RUN pip3 install -r requirements.pip

ENTRYPOINT ["tail", "-f", "/dev/null"]

码头工人撰写

version: '3'
services:
  webserver:
    build:
      context: .
      dockerfile: Dockerfile
    image: name
    container_name: name

需求.pip

cython==0.29.9
kivy==1.11.1

主要测试代码

from kivy.app import App
from kivy.uix.button import Button
class TestApp(App):
    def build(self):
        return Button(text='Hello World')
TestApp().run()

错误

error: XDG_RUNTIME_DIR not set in the environment.
[CRITICAL] [Window      ] Unable to find any valuable Window provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes
egl_rpi - ImportError: cannot import name 'bcm'
  File "/usr/local/lib/python3.6/dist-packages/kivy/core/__init__.py", line 63, in core_select_lib
    fromlist=[modulename], level=0)
  File "/usr/local/lib/python3.6/dist-packages/kivy/core/window/window_egl_rpi.py", line 12, in <module>
    from kivy.lib.vidcore_lite import bcm, egl

sdl2 - RuntimeError: b'No available video device'
  File "/usr/local/lib/python3.6/dist-packages/kivy/core/__init__.py", line 71, in core_select_lib
    cls = cls()
  File "/usr/local/lib/python3.6/dist-packages/kivy/core/window/window_sdl2.py", line 152, in __init__
    super(WindowSDL, self).__init__()
  File "/usr/local/lib/python3.6/dist-packages/kivy/core/window/__init__.py", line 981, in __init__
    self.create_window()
  File "/usr/local/lib/python3.6/dist-packages/kivy/core/window/window_sdl2.py", line 290, in create_window
    self.get_gl_backend_name())
  File "kivy/core/window/_window_sdl2.pyx", line 110, in kivy.core.window._window_sdl2._WindowSDL2Storage.setup_window
  File "kivy/core/window/_window_sdl2.pyx", line 74, in kivy.core.window._window_sdl2._WindowSDL2Storage.die

x11 - ModuleNotFoundError: No module named 'kivy.core.window.window_x11'
  File "/usr/local/lib/python3.6/dist-packages/kivy/core/__init__.py", line 63, in core_select_lib
    fromlist=[modulename], level=0)

[CRITICAL] [App         ] Unable to get a Window, abort.

我只找到了一些关于ubuntu哪些说要安装libsdl2-image-dev但没有工作的参考资料,因为你可以看到我已经在安装它。

标签: python-3.xdockerkivy

解决方案


推荐阅读