teratail header banner
teratail header banner
質問するログイン新規登録
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

1255閲覧

docker×PyQt5(×JupyterLab)の環境が作りたい

yuki235

総合スコア9

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2022/04/19 16:16

0

0

前提

これまではローカル環境でPyQt5を使ってアプリケーションの開発をしていました。
今度新しいPCに移行する予定なので、その時環境開発で躓かないようにDockerに移行することに決めました。
そしてコンテナを作成しましたがPyQt5がうまく動かず、いろいろ試行錯誤をしましたが現在お手上げに近いです。
debian:stable-slimのイメージを使いそこにpythonを入れた状態のコンテナで、PyQt5以外のモジュールは通常通り動作しています。モジュールの競合は起きていないはずです。
仮想環境であることがこのエラーに関係しているかどうかは不明です。
とにかくDocker上でPyQt5(または6)を使用してウェブアプリケーションの開発を行える環境が作れればよいので
以下のエラーの解決の他にもなにか解決策をもっていたらぜひ教えてください。

環境

Windows10 Home
Docker Desktop for Windows
アプリケーションを表示させるためにWindows側にVcXsrvを入れてXlaunchを起動しています。
以下が使用したDockerfileとdocker-compose.ymlです

Dockerfile

1FROM debian:stable-slim 2 3RUN apt-get update -y\ 4 && apt-get upgrade -y \ 5 && apt-get install tzdata -y \ 6 && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \ 7 && apt-get install x11-apps -y \ 8 && apt-get install python3 -y \ 9 && apt-get install python3-pip -y 10 11ENV TZ=Asia/Tokyo 12ENV DISPLAY host.docker.internal:0.0 13 14#以下はPyQt5をある程度動くようにするために実行するコマンド 15#試行錯誤で見つけました。無駄なものもあると思います。 16RUN export QT_DEBUG_PLUGINS=1 \ 17&& apt-get install ffmpeg libsm6 libxext6 -y \ 18&& apt-get install libxcb-icccm4 -y \ 19&& apt-get install libxcb-image0 -y \ 20&& apt-get install libxcb-keysyms1 -y \ 21&& apt-get install libxcb-render-util0 -y \ 22&& apt-get install libxcb-xinerama0 -y \ 23&& apt-get install libxcb-xkb1 -y \ 24&& apt-get install libxkbcommon-x11-0 -y \ 25&& apt-get install libegl1 -y \ 26&& apt-get install libnss3 -y \ 27&& apt-get install libxcomposite1 -y \ 28&& apt-get install libxtst6 -y \ 29&& export LIBGL_ALWAYS_INDIRECT=1 \ 30&& apt-get install -y mesa-utils libgl1-mesa-glx 31 32 33# JupyterLab 34RUN python3 -m pip install --upgrade pip \ 35&& pip install --no-cache-dir \ 36 black \ 37 jupyterlab \ 38 jupyterlab_code_formatter \ 39 jupyterlab-git \ 40 lckr-jupyterlab-variableinspector \ 41 jupyterlab_widgets \ 42 ipywidgets \ 43 import-ipynb 44 45# package 46RUN pip install --no-cache-dir \ 47 numpy \ 48 pandas \ 49 matplotlib \ 50 japanize_matplotlib \ 51 requests \ 52 beautifulsoup4 \ 53 PyQt5 \ 54 PyQtWebEngine

compose.yml

1version: "3" 2services: 3 py3: 4 build: 5 context: ./py3 6 dockerfile: Dockerfile 7 restart: always 8 entrypoint: > 9 jupyter-lab 10 --allow-root 11 --ip=0.0.0.0 12 --port=8887 13 --no-browser 14 --NotebookApp.token='' 15 --notebook-dir=/workspace 16 expose: 17 - "8887" 18 ports: 19 - "127.0.0.1:8887:8887" 20 volumes: 21 - ./py3/root_jupyter:/root/.jupyter 22 - ./workspace:/workspace

実現したいこと

PyQt5のコードを実行し、アプリケーションを表示させる。

発生している問題・エラーメッセージ

エラーコード

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root' libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast QGLXContext: Failed to create dummy context [436:436:0420/002409.613422:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

該当のソースコード

以下のコードは簡易的なブラウザを表示するコードです。
PyQtWebEngineに問題があるのではないかと個人的には思っています。

python

1from PyQt5.QtCore import * 2from PyQt5.QtWidgets import * 3from PyQt5.QtGui import * 4from PyQt5.QtWebEngineWidgets import * 5 6import sys 7 8class MainWindow(QMainWindow): 9 10 def __init__(self, *args, **kwargs): 11 super(MainWindow,self).__init__(*args, **kwargs) 12 13 self.browser = QWebEngineView() 14 self.browser.setUrl(QUrl("http://www.google.com")) 15 16 self.setCentralWidget(self.browser) 17 18 self.show() 19 20app = QApplication(sys.argv) 21window = MainWindow() 22 23app.exec_()

ちなみに以下のコードは正常通り動きます
ボタンを押すとconnectedという文字が消去されるプログラムです。

python

1import sys 2from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel 3 4class ExampleWidget(QWidget): 5 6 def __init__(self): 7 super().__init__() 8 self.initUI() 9 10 def initUI(self): 11 self.resize(250, 150) 12 self.move(300, 300) 13 self.setWindowTitle('sample') 14 15 # buttonの設定 16 self.button = QPushButton('Clear!!') 17 self.label = QLabel('connected') 18 19 # buttonのclickでラベルをクリア 20 self.button.clicked.connect(self.label.clear) 21 22 # レイアウト配置 23 self.grid = QGridLayout() 24 self.grid.addWidget(self.button, 0, 0, 1, 1) 25 self.grid.addWidget(self.label, 1, 0, 1, 2) 26 self.setLayout(self.grid) 27 28 # 表示 29 self.show() 30 31 32if __name__ == '__main__': 33 34 app = QApplication(sys.argv) 35 ew = ExampleWidget() 36 sys.exit(app.exec_())

結果
イメージ説明

試したこと

別のアプローチとしてPyQt5が初めから使えるようになっている(はずの)イメージを利用して環境を作ろうとしました。
fadawar/docker-pyqt5というイメージを使用して以下のDockerfileで環境を作成しました

Dockerfile

1FROM fadawar/docker-pyqt5:latest 2 3RUN apt-get update -y \ 4 && apt-get upgrade -y \ 5 && apt-get install python3-pip -y 6 7ENV DISPLAY host.docker.internal:0.0 8 9# JupyterLab 10RUN pip install --no-cache-dir \ 11 black \ 12 jupyterlab \ 13 jupyterlab_code_formatter \ 14 jupyterlab-git \ 15 lckr-jupyterlab-variableinspector \ 16 jupyterlab_widgets \ 17 ipywidgets \ 18 import-ipynb 19 20# package 21RUN pip install --no-cache-dir \ 22 numpy \ 23 pandas \ 24 matplotlib \ 25 japanize_matplotlib \ 26 requests \ 27 beautifulsoup4 28

しかし先ほどと同じブラウザーを表示するプログラムで以下のエラーを吐きました

error1

1--------------------------------------------------------------------------- 2ModuleNotFoundError Traceback (most recent call last) 3Input In [1], in <cell line: 4>() 4 2 from PyQt5.QtWidgets import * 5 3 from PyQt5.QtGui import * 6----> 4 from PyQt5.QtWebEngineWidgets import * 7 6 import sys 8 8 class MainWindow(QMainWindow): 9 10ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'

このエラーを解決するために
pip install PyQtWebEngine
を実行し再び同じコードを実行すると以下のようなエラーになりました。

error2

1--------------------------------------------------------------------------- 2ImportError Traceback (most recent call last) 3Input In [1], in <cell line: 4>() 4 2 from PyQt5.QtWidgets import * 5 3 from PyQt5.QtGui import * 6----> 4 from PyQt5.QtWebEngineWidgets import * 7 6 import sys 8 8 class MainWindow(QMainWindow): 9 10ImportError: libsmime3.so: cannot open shared object file: No such file or directory

このエラーを解決するために調べて手当たり次第に試してみましたが効果はありませんでした
他にjozo/pyqt5というイメージも試しましたが同様でした

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki235

2022/04/20 14:21

ご意見ありがとうございます。このサイト内で紹介されているコマンド export LIBGL_ALWAYS_INDIRECT=1 はDockerfile内に書き込まれており実行済みですがエラーは消えていないようです。
katsuko

2022/04/20 14:27

あ、ホントだ。失礼しました。 正直、Xサーバ立てて実行するのはグラフィックが低速なので、そのせいで実行できないのでは、という気がしなくもないのですが、もし可能ならばdocker使わずに、VirtualBoxなどでubuntuなりのデスクトップ環境を整えたほうがいいと思います。
yuki235

2022/04/20 18:23

試したことに書いたアプローチに進展がありました ImportError: libsmime3.so: cannot open shared object file: No such file or directory というエラーが以下のコマンドで解決しました apt-get install libnss3 どうやらlibsmime3.soが依存しているファイルの一つのようです そして次のエラーが現れました ImportError: libasound.so.2: cannot open shared object file: No such file or directory
yuki235

2022/04/20 18:30

apt-get install libasound2 apt-get install libxkbfile1 を実行することで上記のようなエラーは消えましたが以下のエラーが現れました このエラーは発生している問題・エラーメッセージの欄のエラーと同一のもののようです QGLXContext: Failed to create dummy context [265:265:0420/182451.097172:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問