2025, Nov 23 15:02

Падение tkinter при запуске через uv из‑за xcb/X11: как починить

Минимальный скрипт на tkinter падает через uv с xcb/X11 assert. Это баг uv, не вашего GUI. Обновите uv, переустановите Python uv и удалите .venv. Проблема уйдет.

Запуск небольшого окна tkinter через uv может внезапно упасть с низкоуровневым ассертом X11/xcb, хотя сам скрипт элементарный и не использует потоки. Если это похоже на ваш случай, вероятнее всего вы столкнулись с недавно исправленной ошибкой в uv, а не с проблемой в вашем GUI‑коде.

Минимальный скрипт, который воспроизводит падение

# файл: xxx.py
import tkinter as tk

def start_app():
    ui = tk.Tk()
    caption = tk.Label(ui, text="This line triggers the issue")
    caption.pack()
    ui.mainloop()

if __name__ == "__main__":
    start_app()

Что происходит при запуске через uv

Запуск файла через uv приводит к жёсткому аварийному завершению с диагностикой xcb:

uv run xxx.py
Using CPython 3.13.6
Creating virtual environment at: .venv
[xcb] Unknown sequence number while appending request
[xcb] You called XInitThreads, this is not your fault
[xcb] Aborting, sorry about that.
python: xcb_io.c:157: append_pending_request: Assertion `!xcb_xlib_unknown_seq_number' failed.

Скрипт не использует потоки, но это не играет роли — ошибка возникает ещё до того, как интерфейс tkinter успевает сделать что‑то существенное.

В чём на самом деле дело

Сбой связан с ошибкой в uv, уже исправленной в исходном проекте. Если на вашей системе всё ещё стоит проблемная сборка, uv run может развернуть окружение, которое на старте вызывает xcb‑ассерты. Сам код tkinter ни при чём.

Исправление: обновите uv, переустановите его Python и очистите локальное venv

Решение простое. Обновите uv до последнего релиза, переустановите Python, которым управляет uv, и удалите локальный .venv, чтобы следующий запуск был «с нуля».

uv self update
uv python upgrade --reinstall
rm -rf .venv

После этого просто запустите скрипт снова:

uv run xxx.py

Если хотите запускать с конкретной версией интерпретатора, это тоже работает:

uv run -p 3.13.6 xxx.py

Почему это важно

Такие падения тулкита легко принять за баги приложения. На деле стабильность вашего GUI‑кода часто зависит от состояния инструментов, которые его разворачивают и запускают. Актуальная версия uv и периодическое «обнуление» окружений, когда что‑то идёт не так, способны сберечь часы бесплодной отладки внутри tkinter или стека X11.

Также полезно помнить о текущей работе над совместимостью. По состоянию на 25 сентября 2025 года есть известные открытые проблемы между uv и tkinter; подробности доступны здесь: github.com/astral-sh/uv/issues/15668.

Итоги

Если минимальная программа на tkinter падает только при запуске через uv, в первую очередь подозревайте средство запуска. Обновите uv, переустановите управляемый uv Python и очистите .venv проекта, чтобы начать с чистого листа. После исправления окружения тот же минимальный скрипт должен выполняться без каких‑либо правок кода.