wsl:: python uv run 실행시 tkinter pyqt 등 GUI library 에러 발생

 

[xcb] Unknown sequence number while appending request
[xcb] You called XInitThreads, this is not your fault
[xcb] Aborting, sorry about that.
python: ../../src/xcb_io.c:157: append_pending_request: Assertion `!xcb_xlib_unknown_seq_number' failed.
Aborted (core dumped)


아래 깃허브 관련 이슈로 등록되고 OPEN 상태임

https://github.com/astral-sh/python-build-standalone/issues/146

 

Not able to run a tkinter program · Issue #146 · astral-sh/python-build-standalone

I am using the bazel/rules_python to compile our python code. according to the configuration, we are using the cpython-3.9.13+20220802-x86_64-unknown-linux-gnu-install_only.tar.gz as our python int...

github.com

 




(현재는 조치됨)

일반 Python 환경에서는 정상 실행되지만, uv가 관리하는 Python 환경에서는 GUI 창이 뜨지 않고 오류가 발생하는 경우입니다.


원인 요약

이 문제는 uv 자체의 문제라기보다는, uv가 사용하는 python-build-standalone 기반 Python 배포판과 WSL의 GUI/X11 환경이 맞물리면서 발생했던 문제에 가깝습니다.

특히 Tkinter는 내부적으로 Tcl/Tk와 X11 관련 라이브러리를 사용합니다. 과거 python-build-standalone의 Tcl/Tk 빌드 방식 때문에 WSL 또는 Linux GUI 환경에서 xcb 관련 오류가 발생할 수 있었습니다.

관련 이슈:

현재는 관련 수정이 반영되어, 최신 uv와 최신 uv-managed Python을 사용하면 Tkinter 문제는 대부분 해결된 상태입니다.


먼저 확인할 것: WSL GUI가 정상인지 점검

uv 문제로 보기 전에 WSL에서 GUI 앱 실행이 가능한지 먼저 확인해야 합니다.

echo $DISPLAY
echo $WAYLAND_DISPLAY
echo $XDG_RUNTIME_DIR

GUI 테스트용 패키지를 설치합니다.

sudo apt update
sudo apt install -y x11-apps

테스트 실행:

xeyes

xeyes 창이 뜬다면 WSLg GUI 환경은 정상입니다.
창이 뜨지 않는다면 uv가 아니라 WSLg, Windows 버전, 그래픽 드라이버, DISPLAY 설정 문제를 먼저 확인해야 합니다.


해결 방법 1: uv와 uv-managed Python 재설치

가장 먼저 권장하는 방법입니다.

uv self update
uv python list --only-installed
uv python install --reinstall 3.13

기존 가상환경을 삭제하고 다시 생성합니다.

rm -rf .venv
uv venv --python 3.13

Tkinter 테스트:

uv run python - <<'PY'
import tkinter as tk

root = tk.Tk()
root.title("uv + tkinter test")
label = tk.Label(root, text="Hello, Tkinter on WSL + uv")
label.pack(padx=30, pady=30)
root.mainloop()
PY

정상이라면 작은 Tkinter 창이 표시됩니다.


해결 방법 2: 시스템 Python을 uv에서 사용하기

최신 uv-managed Python에서도 문제가 남아 있다면, WSL 배포판의 시스템 Python을 사용하는 방법이 안정적입니다.

sudo apt update
sudo apt install -y python3 python3-venv python3-tk

시스템 Python으로 uv 가상환경을 생성합니다.

rm -rf .venv
uv venv --python /usr/bin/python3 --no-managed-python

실행:

uv run --no-managed-python python myapp.py

이 방식은 패키지 관리는 uv로 하되, Python 인터프리터는 Ubuntu/Debian의 시스템 Python을 사용하는 방식입니다.

Tkinter처럼 OS GUI 라이브러리와 밀접하게 연결된 경우에는 이 방법이 가장 안정적일 수 있습니다.


해결 방법 3: PyQt/PySide는 xcb 의존성 설치 필요

PyQt나 PySide에서 발생하는 xcb 오류는 Tkinter 문제와 별개일 수 있습니다.
Qt는 Linux에서 GUI를 실행할 때 xcb 플랫폼 플러그인을 사용하기 때문에 관련 라이브러리가 필요합니다.

Ubuntu/Debian WSL에서는 다음 패키지를 설치합니다.

sudo apt update
sudo apt install -y \
  libxcb-cursor0 \
  libxcb-icccm4 \
  libxcb-image0 \
  libxcb-keysyms1 \
  libxcb-render-util0 \
  libxcb-xinerama0 \
  libxcb-xkb1 \
  libxkbcommon-x11-0 \
  libgl1 \
  libegl1 \
  libdbus-1-3

PyQt6 테스트:

uv init pyqt-test
cd pyqt-test

uv python pin 3.13
uv add PyQt6

uv run python - <<'PY'
import sys
from PyQt6.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
label = QLabel("Hello, PyQt6 on WSL + uv")
label.resize(300, 100)
label.show()
sys.exit(app.exec())
PY

오류가 계속된다면 Qt 플러그인 로딩 로그를 확인합니다.

QT_DEBUG_PLUGINS=1 uv run python app.py

필요에 따라 Qt 플랫폼을 명시할 수도 있습니다.

QT_QPA_PLATFORM=xcb uv run python app.py

또는 WSLg Wayland 환경에서는 다음도 시도할 수 있습니다.

QT_QPA_PLATFORM=wayland uv run python app.py


댓글 쓰기 · 수정

0 댓글