やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

pywebviewを使いたかったけどGTKもQtもインストールできず使えなかった

 Pythonのパッケージっていつもインストールに失敗して使えない印象。

やりたかったこと

index.html

<input id="name">
<button onclick="save()">OK</button>
<script>
async function save() {
    const text = doqument.querySelector('#name').value
    let res = await pywebview.api.save(text);
    console.log(res);
}
</script>

run.py

#!/usr/bin/env python3
# coding: utf8
import webview

class Api:
    def save(self, text):
        with open('./save.txt', 'w', encoding='utf-8') as f:
            f.write(text)

api=Api()
window = webview.create_window("PyWebView", url="web\\index.html", js_api=api)
webview.start(http_server=True, debug=True)

結果

$ ./run.py
[pywebview] GTK cannot be loaded
Traceback (most recent call last):
  File "/home/pi/.anyenv/envs/pyenv/versions/3.10.5/lib/python3.10/site-packages/webview/guilib.py", line 25, in import_gtk
    import webview.platforms.gtk as guilib
  File "/home/pi/.anyenv/envs/pyenv/versions/3.10.5/lib/python3.10/site-packages/webview/platforms/gtk.py", line 20, in <module>
    import gi
ModuleNotFoundError: No module named 'gi'
[pywebview] QT cannot be loaded
Traceback (most recent call last):
  File "/home/pi/.anyenv/envs/pyenv/versions/3.10.5/lib/python3.10/site-packages/webview/guilib.py", line 37, in import_qt
    import webview.platforms.qt as guilib
  File "/home/pi/.anyenv/envs/pyenv/versions/3.10.5/lib/python3.10/site-packages/webview/platforms/qt.py", line 24, in <module>
    from qtpy import QtCore
ModuleNotFoundError: No module named 'qtpy'
Traceback (most recent call last):
  File "/tmp/work/Python.PyWebView.HelloWorld.20240130133827/src/0/run.py", line 18, in <module>
    webview.start(http_server=True, debug=True)
  File "/home/pi/.anyenv/envs/pyenv/versions/3.10.5/lib/python3.10/site-packages/webview/__init__.py", line 155, in start
    guilib = initialize(gui)
  File "/home/pi/.anyenv/envs/pyenv/versions/3.10.5/lib/python3.10/site-packages/webview/guilib.py", line 109, in initialize
    raise WebViewException(
webview.util.WebViewException: You must have either QT or GTK with Python extensions installed in order to use pywebview.

GUIライブラリのGTKやQTが無い」と怒られた。

インストールできなかった

 PyWebView自体はインストールできた。

$ pip install pywebview
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pywebview
  Downloading https://www.piwheels.org/simple/pywebview/pywebview-4.4.1-py3-none-any.whl (405 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 405.9/405.9 kB 126.2 kB/s eta 0:00:00
Collecting proxy-tools
  Downloading https://www.piwheels.org/simple/proxy-tools/proxy_tools-0.1.0-py3-none-any.whl (3.7 kB)
Collecting bottle
  Downloading https://www.piwheels.org/simple/bottle/bottle-0.12.25-py3-none-any.whl (90 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.2/90.2 kB 271.0 kB/s eta 0:00:00
Requirement already satisfied: typing-extensions in /home/pi/.anyenv/envs/pyenv/versions/3.10.5/lib/python3.10/site-packages (from pywebview) (4.4.0)
Installing collected packages: proxy-tools, bottle, pywebview
Successfully installed bottle-0.12.25 proxy-tools-0.1.0 pywebview-4.4.1

 でも、依存関係のGTKやQTがインストールできなかった。

 公式文書を読むとLinuxGTKかQtのインストールが必要とある。その手順に従ってみたが「パッケージが見つからない」と怒られた。

$ sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0 gir1.2-webkit2-4.1
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
E: パッケージ gir1.2-webkit2-4.1 が見つかりません
E: 'gir1.2-webkit2-4.1' に一致するパッケージは見つかりませんでした
E: 正規表現 'gir1.2-webkit2-4.1' ではパッケージは見つかりませんでした

 パッケージgir1.2-webkit2-4.1、無いってよ。おい!

 パッケージマネージャ使えねぇ……。ネットから入手するか。

 /etc/apt/sources.listに以下を追加しろってさ。

deb http://security.debian.org/debian-security bookworm-security main 

 元からあったのに合わせて以下にした。

deb http://security.debian.org/debian-security buster main contrib non-free rpi

 再びインストールを試みるも、やはり見つからず……。

 GTKは諦めてQtのインストールを試みるも、失敗……。

$ pip install qtpy pyside2
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting qtpy
  Downloading https://www.piwheels.org/simple/qtpy/QtPy-2.4.1-py3-none-any.whl (93 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 93.5/93.5 kB 257.4 kB/s eta 0:00:00
ERROR: Could not find a version that satisfies the requirement pyside2 (from versions: none)
ERROR: No matching distribution found for pyside2
$ sudo apt install python3-pyqt5 python3-pyqt5.qtwebengine python3-pyqt5.qtwebchannel libqt5webkit5-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
パッケージ python3-pyqt5.qtwebengine は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。

E: パッケージ 'python3-pyqt5.qtwebengine' にはインストール候補がありません

 GTKもQTもインストールできなかった。

 PyWebView、使えませんでした……。

 同じようなことができるライブラリや言語API、どこかにないかなぁ。