Changing and removing `SuperscriptButton.svelte` has no effect at all. Why?

Problem Description

I was trying to debug the problem with non-english keyboards and their shortcuts not working, as e.g. reported here: Wrong shortcut for indentation on German keyboard still not fixed.

I know that the superscript button doesn’t work because on a german keyboard it’s impossible to hit Control+=; it must be Control+Shift+= but that shortcut is already reserved for subscript.

I face a problem though. I thought the logical thing is to assume that if I change the shortcut in ts/editor/editor-toolbar/SuperscriptButton.svelte, the shortcut should actually change. Here’s an example:

<TextAttributeButton
    tagName="sup"
    {matcher}
    key="superscript"
    tooltip={tr.editingSuperscript()}
    keyCombination="Control+="
    exclusiveNames={["subscript"]}
>
    <Icon icon={superscriptIcon} />
</TextAttributeButton>

This above is the superscript button (actual code on master). I swapped the "Control+=" part with "Control+Shift+=" from the subscript button and vice versa. Then I ran ./run.

The result? Nothing changed. The button behavior isn’t different at all. After trying lots of other things I decided to completely remove everything from SuperscriptButton.svelte and recompile using ./run (yes, that means that file was blank). I expected there to be some sort of compilation error, a runtime error or at least the superscript button to be missing / non functional. But that wasn’t the case at all. It’s as if I never even changed / removed anything in the first place.

Why does that happen? I am mostly interessted in being able to change those shortcut keys and read them in a terminal (basically read what anki thinks I pressed, i.e. what key and code).

It probably doesn’t help that I mostly have experience in bash, followed by C and I’m not an expert in either of them…

How I’m running / building Anki

I’m on debian linux, sid in a virtualbox (host is debian oldstable).
I ran the following:

git clone --single-branch --branch=main https://github.com/ankitects/anki.git anki
cd anki/
clear && ./run
source ./out/pyenv/bin/activate
pip install aqt[qt5]
pip install aqt[qt6]
clear && ./run

(I had pip installed qt5 and qt6 already in the past and never used the pyenv in that directory either in the past. I did it this time because anki refused to build otherwise, even though the current stable branch build fine without it. If I’m doing something wrong here, please feel free to point it out!)

Anki Debug Info

Anki 24.11 (87ccd24e) (src) (ao)
Python 3.9.18 Qt 6.8.1 PyQt 6.8.0
Platform: Linux-6.12.6-amd64-x86_64-with-glibc2.40

===Add-ons (active)===
(add-on provided name [Add-on folder, installed at, version, is config changed])
AnkiWebView Inspector ['31746032', 2023-06-27T21:26, 'None', '']
Image Occlusion Enhanced ['1374772155', 2022-04-09T09:15, 'None', '']
Review Heatmap ['1771074083', 2022-06-30T03:43, 'None', '']
Study Time Stats ['1247171202', 2024-02-24T17:59, 'None', '']

===IDs of active AnkiWeb add-ons===
1247171202 1374772155 1771074083 31746032

===Add-ons (inactive)===
(add-on provided name [Add-on folder, installed at, version, is config changed])

1 Like
source ./out/pyenv/bin/activate
pip install aqt[qt5]
pip install aqt[qt6]

Did you install aqt into the generated venv? I don’t think that’s right. Try running ./tools/clean and then ./run again

1 Like

Yes, I had to because I was getting ModuleNotFoundError: No module named 'PyQt6' (same for PyQt5).

I just did that and got the above error again. In case you’re interessted, here’s most of the output (I had to cut of some Compiled messages at the start because I hit a character limit on this forum):

Output
   Compiling runner v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/build/runner)
   Compiling base64 v0.22.1
   Compiling byteorder v1.5.0
   Compiling home v0.5.9
   Compiling cpufeatures v0.2.14
   Compiling which v5.0.0
   Compiling sha2 v0.10.8
   Compiling zip v0.6.6
   Compiling reqwest v0.12.8
   Compiling anki_process v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/process)
   Compiling tar v0.4.42
   Compiling clap v4.5.20
   Compiling anki_io v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/io)
   Compiling xz2 v0.1.7
   Compiling junction v1.2.0
   Compiling termcolor v1.4.1
   Compiling zstd v0.13.2
    Finished `release` profile [optimized] target(s) in 1m 22s
   Compiling proc-macro2 v1.0.88
   Compiling unicode-ident v1.0.13
   Compiling rustix v0.38.37
   Compiling linux-raw-sys v0.4.14
   Compiling memchr v2.7.4
   Compiling bitflags v2.6.0
   Compiling libc v0.2.161
   Compiling heck v0.5.0
   Compiling quote v1.0.37
   Compiling syn v2.0.82
   Compiling camino v1.1.9
   Compiling aho-corasick v1.1.3
   Compiling once_cell v1.20.2
   Compiling anyhow v1.0.90
   Compiling fastrand v2.1.1
   Compiling regex-syntax v0.8.5
   Compiling either v1.13.0
   Compiling cfg-if v1.0.0
   Compiling tempfile v3.13.0
   Compiling regex-automata v0.4.8
   Compiling bstr v1.10.0
   Compiling same-file v1.0.6
   Compiling home v0.5.9
   Compiling log v0.4.22
   Compiling globset v0.4.15
   Compiling which v5.0.0
   Compiling walkdir v2.5.0
   Compiling num_cpus v1.16.0
   Compiling itertools v0.13.0
   Compiling maplit v1.0.2
   Compiling dunce v1.0.5
   Compiling snafu-derive v0.8.5
   Compiling snafu v0.8.5
   Compiling anki_io v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/io)
   Compiling ninja_gen v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/build/ninja_gen)
   Compiling configure v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/build/configure)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 36.09s
     Running `out/rust/debug/configure`
[1/1; 1 active; 0.086s] build:configure
[12/62; 4 active; 26.874s] node_modules
yarn install v1.22.22
[1/4] Resolving packages...
warning Resolution field "cookie@0.7.0" is incompatible with requested version "cookie@^0.6.0"
[2/4] Fetching packages...
warning Pattern ["string-width@^4.1.0"] is trying to unpack in the same destination "/home/anon/.cache/yarn/v6/npm-string-width-cjs-4.2.3-269c7117d27b05ad2e536830a8ec895ef9c6d010-integrity/node_modules/string-width-cjs" as pattern ["string-width-cjs@npm:string-width@^4.2.0"]. This could result in non-deterministic behavior, skipping.
[3/4] Linking dependencies...
warning " > esbuild-sass-plugin@2.16.1" has incorrect peer dependency "esbuild@^0.19.4".
warning Workspaces can only be enabled in private projects.
[4/4] Building fresh packages...
Done in 22.78s.
[30/62; 3 active; 51.388s] pyenv
Collecting build==1.2.1
  Using cached build-1.2.1-py3-none-any.whl (21 kB)
Collecting click==8.1.7
  Using cached click-8.1.7-py3-none-any.whl (97 kB)
Collecting colorama==0.4.6
  Using cached colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Collecting importlib-metadata==8.4.0
  Using cached importlib_metadata-8.4.0-py3-none-any.whl (26 kB)
Collecting packaging==24.1
  Using cached packaging-24.1-py3-none-any.whl (53 kB)
Collecting pip-tools==7.4.1
  Using cached pip_tools-7.4.1-py3-none-any.whl (61 kB)
Collecting pyproject-hooks==1.1.0
  Using cached pyproject_hooks-1.1.0-py3-none-any.whl (9.2 kB)
Collecting tomli==2.0.1
  Using cached tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting wheel==0.44.0
  Using cached wheel-0.44.0-py3-none-any.whl (67 kB)
Collecting zipp==3.20.1
  Using cached zipp-3.20.1-py3-none-any.whl (9.0 kB)
Collecting pip==24.2
  Using cached pip-24.2-py3-none-any.whl (1.8 MB)
Collecting setuptools==74.1.1
  Using cached setuptools-74.1.1-py3-none-any.whl (1.3 MB)
Installing collected packages: zipp, wheel, tomli, setuptools, pyproject-hooks, pip, packaging, colorama, click, importlib-metadata, build, pip-tools
  Attempting uninstall: setuptools
    Found existing installation: setuptools 58.1.0
    Uninstalling setuptools-58.1.0:
      Successfully uninstalled setuptools-58.1.0
  Attempting uninstall: pip
    Found existing installation: pip 23.0.1
    Uninstalling pip-23.0.1:
      Successfully uninstalled pip-23.0.1
Successfully installed build-1.2.1 click-8.1.7 colorama-0.4.6 importlib-metadata-8.4.0 packaging-24.1 pip-24.2 pip-tools-7.4.1 pyproject-hooks-1.1.0 setuptools-74.1.1 tomli-2.0.1 wheel-0.44.0 zipp-3.20.1
WARNING: There was an error checking the latest version of pip.
Collecting astroid==3.2.4 (from -r /tmp/tmpy0td5lg2 (line 1))
  Using cached astroid-3.2.4-py3-none-any.whl (276 kB)
Collecting atomicwrites==1.4.1 (from -r /tmp/tmpy0td5lg2 (line 4))
  Using cached atomicwrites-1.4.1-py2.py3-none-any.whl
Collecting attrs==24.2.0 (from -r /tmp/tmpy0td5lg2 (line 6))
  Using cached attrs-24.2.0-py3-none-any.whl (63 kB)
Collecting beautifulsoup4==4.12.3 (from -r /tmp/tmpy0td5lg2 (line 9))
  Using cached beautifulsoup4-4.12.3-py3-none-any.whl (147 kB)
Collecting black==24.8.0 (from -r /tmp/tmpy0td5lg2 (line 12))
  Using cached black-24.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (1.8 MB)
Collecting blinker==1.8.2 (from -r /tmp/tmpy0td5lg2 (line 35))
  Using cached blinker-1.8.2-py3-none-any.whl (9.5 kB)
Collecting certifi==2024.8.30 (from -r /tmp/tmpy0td5lg2 (line 38))
  Using cached certifi-2024.8.30-py3-none-any.whl (167 kB)
Collecting charset-normalizer==3.3.2 (from -r /tmp/tmpy0td5lg2 (line 41))
  Using cached charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (142 kB)
Collecting compare-locales==9.0.4 (from -r /tmp/tmpy0td5lg2 (line 132))
  Using cached compare_locales-9.0.4-py3-none-any.whl (75 kB)
Collecting decorator==5.1.1 (from -r /tmp/tmpy0td5lg2 (line 135))
  Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)
Collecting dill==0.3.8 (from -r /tmp/tmpy0td5lg2 (line 138))
  Using cached dill-0.3.8-py3-none-any.whl (116 kB)
Collecting distro==1.9.0 (from -r /tmp/tmpy0td5lg2 (line 141))
  Using cached distro-1.9.0-py3-none-any.whl (20 kB)
Collecting exceptiongroup==1.2.2 (from -r /tmp/tmpy0td5lg2 (line 144))
  Using cached exceptiongroup-1.2.2-py3-none-any.whl (16 kB)
Collecting flask==3.0.3 (from -r /tmp/tmpy0td5lg2 (line 147))
  Using cached flask-3.0.3-py3-none-any.whl (101 kB)
Collecting flask-cors==5.0.0 (from -r /tmp/tmpy0td5lg2 (line 150))
  Using cached Flask_Cors-5.0.0-py2.py3-none-any.whl (14 kB)
Collecting fluent-syntax==0.19.0 (from -r /tmp/tmpy0td5lg2 (line 153))
  Using cached fluent.syntax-0.19.0-py2.py3-none-any.whl (16 kB)
Collecting idna==3.8 (from -r /tmp/tmpy0td5lg2 (line 156))
  Using cached idna-3.8-py3-none-any.whl (66 kB)
Collecting iniconfig==2.0.0 (from -r /tmp/tmpy0td5lg2 (line 159))
  Using cached iniconfig-2.0.0-py3-none-any.whl (5.9 kB)
Collecting isort==5.13.2 (from -r /tmp/tmpy0td5lg2 (line 162))
  Using cached isort-5.13.2-py3-none-any.whl (92 kB)
Collecting itsdangerous==2.2.0 (from -r /tmp/tmpy0td5lg2 (line 165))
  Using cached itsdangerous-2.2.0-py3-none-any.whl (16 kB)
Collecting jinja2==3.1.5 (from -r /tmp/tmpy0td5lg2 (line 168))
  Using cached jinja2-3.1.5-py3-none-any.whl (134 kB)
Collecting jsonschema==4.1.2 (from -r /tmp/tmpy0td5lg2 (line 171))
  Using cached jsonschema-4.1.2-py3-none-any.whl (69 kB)
Collecting markdown==3.7 (from -r /tmp/tmpy0td5lg2 (line 174))
  Using cached Markdown-3.7-py3-none-any.whl (106 kB)
Collecting markupsafe==2.1.5 (from -r /tmp/tmpy0td5lg2 (line 177))
  Using cached MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)
Collecting mccabe==0.7.0 (from -r /tmp/tmpy0td5lg2 (line 238))
  Using cached mccabe-0.7.0-py2.py3-none-any.whl (7.3 kB)
Collecting mock==5.1.0 (from -r /tmp/tmpy0td5lg2 (line 241))
  Using cached mock-5.1.0-py3-none-any.whl (30 kB)
Collecting mypy==1.11.2 (from -r /tmp/tmpy0td5lg2 (line 244))
  Using cached mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (12.5 MB)
Collecting mypy-extensions==1.0.0 (from -r /tmp/tmpy0td5lg2 (line 272))
  Using cached mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)
Collecting mypy-protobuf==3.6.0 (from -r /tmp/tmpy0td5lg2 (line 275))
  Using cached mypy_protobuf-3.6.0-py3-none-any.whl (16 kB)
Collecting orjson==3.10.7 (from -r /tmp/tmpy0td5lg2 (line 278))
  Using cached orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (141 kB)
Collecting pathspec==0.12.1 (from -r /tmp/tmpy0td5lg2 (line 336))
  Using cached pathspec-0.12.1-py3-none-any.whl (31 kB)
Collecting pip-system-certs==4.0 (from -r /tmp/tmpy0td5lg2 (line 339))
  Using cached pip_system_certs-4.0-py2.py3-none-any.whl (6.1 kB)
Collecting platformdirs==4.2.2 (from -r /tmp/tmpy0td5lg2 (line 342))
  Using cached platformdirs-4.2.2-py3-none-any.whl (18 kB)
Collecting pluggy==1.5.0 (from -r /tmp/tmpy0td5lg2 (line 345))
  Using cached pluggy-1.5.0-py3-none-any.whl (20 kB)
Collecting protobuf==5.28.2 (from -r /tmp/tmpy0td5lg2 (line 348))
  Using cached protobuf-5.28.2-cp38-abi3-manylinux2014_x86_64.whl (316 kB)
Collecting pychromedevtools==1.0.3 (from -r /tmp/tmpy0td5lg2 (line 360))
  Using cached PyChromeDevTools-1.0.3-py3-none-any.whl
Collecting pylint==3.2.7 (from -r /tmp/tmpy0td5lg2 (line 362))
  Using cached pylint-3.2.7-py3-none-any.whl (519 kB)
Collecting pyrsistent==0.20.0 (from -r /tmp/tmpy0td5lg2 (line 365))
  Using cached pyrsistent-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (117 kB)
Collecting pysocks==1.7.1 (from -r /tmp/tmpy0td5lg2 (line 398))
  Using cached PySocks-1.7.1-py3-none-any.whl (16 kB)
Collecting pytest==8.3.2 (from -r /tmp/tmpy0td5lg2 (line 402))
  Using cached pytest-8.3.2-py3-none-any.whl (341 kB)
Collecting requests==2.32.3 (from -r /tmp/tmpy0td5lg2 (line 405))
  Using cached requests-2.32.3-py3-none-any.whl (64 kB)
Collecting send2trash==1.8.3 (from -r /tmp/tmpy0td5lg2 (line 408))
  Using cached Send2Trash-1.8.3-py3-none-any.whl (18 kB)
Collecting setuptools==75.1.0 (from -r /tmp/tmpy0td5lg2 (line 411))
  Using cached setuptools-75.1.0-py3-none-any.whl (1.2 MB)
Collecting six==1.16.0 (from -r /tmp/tmpy0td5lg2 (line 414))
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting soupsieve==2.6 (from -r /tmp/tmpy0td5lg2 (line 417))
  Using cached soupsieve-2.6-py3-none-any.whl (36 kB)
Collecting toml==0.10.2 (from -r /tmp/tmpy0td5lg2 (line 420))
  Using cached toml-0.10.2-py2.py3-none-any.whl (16 kB)
Collecting tomlkit==0.13.2 (from -r /tmp/tmpy0td5lg2 (line 423))
  Using cached tomlkit-0.13.2-py3-none-any.whl (37 kB)
Collecting types-click==7.1.8 (from -r /tmp/tmpy0td5lg2 (line 426))
  Using cached types_click-7.1.8-py3-none-any.whl (12 kB)
Collecting types-decorator==5.1.8.20240310 (from -r /tmp/tmpy0td5lg2 (line 429))
  Using cached types_decorator-5.1.8.20240310-py3-none-any.whl (3.1 kB)
Collecting types-flask==1.1.6 (from -r /tmp/tmpy0td5lg2 (line 432))
  Using cached types_Flask-1.1.6-py3-none-any.whl (13 kB)
Collecting types-flask-cors==5.0.0.20240902 (from -r /tmp/tmpy0td5lg2 (line 435))
  Using cached types_Flask_Cors-5.0.0.20240902-py3-none-any.whl (5.3 kB)
Collecting types-jinja2==2.11.9 (from -r /tmp/tmpy0td5lg2 (line 438))
  Using cached types_Jinja2-2.11.9-py3-none-any.whl (18 kB)
Collecting types-markdown==3.7.0.20240822 (from -r /tmp/tmpy0td5lg2 (line 441))
  Using cached types_Markdown-3.7.0.20240822-py3-none-any.whl (18 kB)
Collecting types-markupsafe==1.1.10 (from -r /tmp/tmpy0td5lg2 (line 444))
  Using cached types_MarkupSafe-1.1.10-py3-none-any.whl (4.0 kB)
Collecting types-orjson==3.6.2 (from -r /tmp/tmpy0td5lg2 (line 447))
  Using cached types_orjson-3.6.2-py3-none-any.whl (2.2 kB)
Collecting types-protobuf==5.27.0.20240626 (from -r /tmp/tmpy0td5lg2 (line 450))
  Using cached types_protobuf-5.27.0.20240626-py3-none-any.whl (68 kB)
Collecting types-pywin32==306.0.0.20240822 (from -r /tmp/tmpy0td5lg2 (line 453))
  Using cached types_pywin32-306.0.0.20240822-py3-none-any.whl (320 kB)
Collecting types-requests==2.32.0.20240712 (from -r /tmp/tmpy0td5lg2 (line 456))
  Using cached types_requests-2.32.0.20240712-py3-none-any.whl (15 kB)
Collecting types-waitress==3.0.0.20240423 (from -r /tmp/tmpy0td5lg2 (line 459))
  Using cached types_waitress-3.0.0.20240423-py3-none-any.whl (12 kB)
Collecting types-werkzeug==1.0.9 (from -r /tmp/tmpy0td5lg2 (line 462))
  Using cached types_Werkzeug-1.0.9-py3-none-any.whl (36 kB)
Collecting typing-extensions==4.12.2 (from -r /tmp/tmpy0td5lg2 (line 465))
  Using cached typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Collecting urllib3==2.2.2 (from -r /tmp/tmpy0td5lg2 (line 468))
  Using cached urllib3-2.2.2-py3-none-any.whl (121 kB)
Collecting waitress==3.0.1 (from -r /tmp/tmpy0td5lg2 (line 471))
  Using cached waitress-3.0.1-py3-none-any.whl (56 kB)
Collecting websocket-client==1.8.0 (from -r /tmp/tmpy0td5lg2 (line 474))
  Using cached websocket_client-1.8.0-py3-none-any.whl (58 kB)
Collecting werkzeug==3.0.6 (from -r /tmp/tmpy0td5lg2 (line 477))
  Using cached werkzeug-3.0.6-py3-none-any.whl (227 kB)
Collecting wrapt==1.16.0 (from -r /tmp/tmpy0td5lg2 (line 480))
  Using cached wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80 kB)
Requirement already satisfied: click>=8.0.0 in ./out/pyenv/lib/python3.9/site-packages (from black==24.8.0->-r /tmp/tmpy0td5lg2 (line 12)) (8.1.7)
Requirement already satisfied: packaging>=22.0 in ./out/pyenv/lib/python3.9/site-packages (from black==24.8.0->-r /tmp/tmpy0td5lg2 (line 12)) (24.1)
Requirement already satisfied: tomli>=1.1.0 in ./out/pyenv/lib/python3.9/site-packages (from black==24.8.0->-r /tmp/tmpy0td5lg2 (line 12)) (2.0.1)
Requirement already satisfied: importlib-metadata>=3.6.0 in ./out/pyenv/lib/python3.9/site-packages (from flask==3.0.3->-r /tmp/tmpy0td5lg2 (line 147)) (8.4.0)
Requirement already satisfied: zipp>=0.5 in ./out/pyenv/lib/python3.9/site-packages (from importlib-metadata>=3.6.0->flask==3.0.3->-r /tmp/tmpy0td5lg2 (line 147)) (3.20.1)
Installing collected packages: types-werkzeug, types-orjson, types-markupsafe, types-click, wrapt, websocket-client, waitress, urllib3, typing-extensions, types-waitress, types-pywin32, types-protobuf, types-markdown, types-jinja2, types-decorator, tomlkit, toml, soupsieve, six, setuptools, send2trash, pysocks, pyrsistent, protobuf, pluggy, platformdirs, pathspec, orjson, mypy-extensions, mock, mccabe, markupsafe, itsdangerous, isort, iniconfig, idna, exceptiongroup, distro, dill, decorator, charset-normalizer, certifi, blinker, attrs, atomicwrites, werkzeug, types-requests, types-flask, requests, pytest, pip-system-certs, mypy-protobuf, mypy, markdown, jsonschema, jinja2, fluent-syntax, black, beautifulsoup4, astroid, pylint, pychromedevtools, flask, compare-locales, types-flask-cors, flask-cors
  Attempting uninstall: setuptools
    Found existing installation: setuptools 74.1.1
    Uninstalling setuptools-74.1.1:
      Successfully uninstalled setuptools-74.1.1
Successfully installed astroid-3.2.4 atomicwrites-1.4.1 attrs-24.2.0 beautifulsoup4-4.12.3 black-24.8.0 blinker-1.8.2 certifi-2024.8.30 charset-normalizer-3.3.2 compare-locales-9.0.4 decorator-5.1.1 dill-0.3.8 distro-1.9.0 exceptiongroup-1.2.2 flask-3.0.3 flask-cors-5.0.0 fluent-syntax-0.19.0 idna-3.8 iniconfig-2.0.0 isort-5.13.2 itsdangerous-2.2.0 jinja2-3.1.5 jsonschema-4.1.2 markdown-3.7 markupsafe-2.1.5 mccabe-0.7.0 mock-5.1.0 mypy-1.11.2 mypy-extensions-1.0.0 mypy-protobuf-3.6.0 orjson-3.10.7 pathspec-0.12.1 pip-system-certs-4.0 platformdirs-4.2.2 pluggy-1.5.0 protobuf-5.28.2 pychromedevtools-1.0.3 pylint-3.2.7 pyrsistent-0.20.0 pysocks-1.7.1 pytest-8.3.2 requests-2.32.3 send2trash-1.8.3 setuptools-75.1.0 six-1.16.0 soupsieve-2.6 toml-0.10.2 tomlkit-0.13.2 types-click-7.1.8 types-decorator-5.1.8.20240310 types-flask-1.1.6 types-flask-cors-5.0.0.20240902 types-jinja2-2.11.9 types-markdown-3.7.0.20240822 types-markupsafe-1.1.10 types-orjson-3.6.2 types-protobuf-5.27.0.20240626 types-pywin32-306.0.0.20240822 types-requests-2.32.0.20240712 types-waitress-3.0.0.20240423 types-werkzeug-1.0.9 typing-extensions-4.12.2 urllib3-2.2.2 waitress-3.0.1 websocket-client-1.8.0 werkzeug-3.0.6 wrapt-1.16.0

[notice] A new release of pip is available: 24.2 -> 24.3.1
[notice] To update, run: pip install --upgrade pip
[34/62; 7 active; 51.670s] qt:aqt:forms
FAILED: /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/about_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/about_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addcards_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addcards_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addfield_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addfield_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addmodel_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addmodel_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addonconf_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addonconf_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addons_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addons_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browser_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browser_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browserdisp_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browserdisp_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browseropts_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browseropts_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/changemap_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/changemap_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/changemodel_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/changemodel_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/clayout_top_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/clayout_top_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/customstudy_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/customstudy_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/dconf_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/dconf_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/debug_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/debug_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/editcurrent_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/editcurrent_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/edithtml_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/edithtml_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/emptycards_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/emptycards_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/exporting_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/exporting_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/fields_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/fields_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/filtered_deck_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/filtered_deck_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/finddupes_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/finddupes_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/findreplace_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/findreplace_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/forget_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/forget_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/getaddons_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/getaddons_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/importing_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/importing_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/main_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/main_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/modelopts_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/modelopts_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/models_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/models_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/preferences_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/preferences_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/preview_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/preview_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/profiles_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/profiles_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/progress_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/progress_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/reposition_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/reposition_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/setgroup_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/setgroup_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/setlang_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/setlang_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/stats_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/stats_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/studydeck_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/studydeck_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/synclog_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/synclog_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/taglimit_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/taglimit_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/template_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/template_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/widgets_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/widgets_qt6.py 
/home/anon/Downloads/anki/Source_Code/anki/out/rust/release/runner run /home/anon/Downloads/anki/Source_Code/anki/out/pyenv/bin/python qt/tools/build_ui.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/about_qt5.py
Traceback (most recent call last):
  File "/home/anon/Downloads/anki/Source_Code/anki/qt/tools/build_ui.py", line 12, in <module>
    from PyQt6.uic import compileUi
ModuleNotFoundError: No module named 'PyQt6'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/anon/Downloads/anki/Source_Code/anki/qt/tools/build_ui.py", line 16, in <module>
    from PyQt5.uic import compileUi  # type: ignore
ModuleNotFoundError: No module named 'PyQt5'
Failed with code Some(1): /home/anon/Downloads/anki/Source_Code/anki/out/pyenv/bin/python qt/tools/build_ui.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/about_qt5.py
[36/62; 5 active; 51.850s] pylib:anki:proto
Writing mypy to anki/ankidroid_pb2.pyi
Writing mypy to anki/ankihub_pb2.pyi
Writing mypy to anki/ankiweb_pb2.pyi
Writing mypy to anki/backend_pb2.pyi
Writing mypy to anki/card_rendering_pb2.pyi
Writing mypy to anki/cards_pb2.pyi
Writing mypy to anki/collection_pb2.pyi
Writing mypy to anki/config_pb2.pyi
Writing mypy to anki/deck_config_pb2.pyi
Writing mypy to anki/decks_pb2.pyi
Writing mypy to anki/frontend_pb2.pyi
Writing mypy to anki/generic_pb2.pyi
Writing mypy to anki/i18n_pb2.pyi
Writing mypy to anki/image_occlusion_pb2.pyi
Writing mypy to anki/import_export_pb2.pyi
Writing mypy to anki/links_pb2.pyi
Writing mypy to anki/media_pb2.pyi
Writing mypy to anki/notes_pb2.pyi
Writing mypy to anki/notetypes_pb2.pyi
Writing mypy to anki/scheduler_pb2.pyi
Writing mypy to anki/search_pb2.pyi
Writing mypy to anki/stats_pb2.pyi
Writing mypy to anki/sync_pb2.pyi
Writing mypy to anki/tags_pb2.pyi
[39/62; 2 active; 81.439s] rslib:proto
    Blocking waiting for file lock on package cache
   Compiling either v1.13.0
   Compiling bytes v1.7.2
   Compiling syn v2.0.82
   Compiling once_cell v1.20.2
   Compiling aho-corasick v1.1.3
   Compiling regex-syntax v0.8.5
   Compiling itertools v0.13.0
   Compiling tempfile v3.13.0
   Compiling regex-automata v0.4.8
   Compiling hashbrown v0.15.2
   Compiling equivalent v1.0.1
   Compiling prettyplease v0.2.24
   Compiling indexmap v2.6.0
   Compiling rustversion v1.0.18
   Compiling fixedbitset v0.4.2
   Compiling petgraph v0.6.5
   Compiling regex v1.11.0
   Compiling multimap v0.10.0
   Compiling inflections v1.1.1
   Compiling serde v1.0.210
   Compiling prost-derive v0.13.3
   Compiling snafu-derive v0.8.5
   Compiling serde_derive v1.0.210
   Compiling strum_macros v0.26.4
   Compiling prost v0.13.3
   Compiling prost-types v0.13.3
   Compiling snafu v0.8.5
   Compiling anki_io v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/io)
   Compiling prost-reflect v0.14.2
   Compiling prost-build v0.13.3
   Compiling strum v0.26.3
   Compiling anki_proto_gen v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/proto_gen)
   Compiling anki_proto v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/proto)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 21s
[40/62; 1 active; 104.574s] rslib:i18n
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on build directory
   Compiling displaydoc v0.2.5
   Compiling proc-macro-hack v0.5.20+deprecated
   Compiling thiserror v1.0.64
   Compiling thiserror-impl v1.0.64
   Compiling rustc-hash v1.1.0
   Compiling type-map v0.5.0
   Compiling siphasher v0.3.11
   Compiling self_cell v1.0.4
   Compiling self_cell v0.10.3
   Compiling serde_derive v1.0.210
   Compiling smallvec v1.13.2
   Compiling serde_json v1.0.132
   Compiling itoa v1.0.11
   Compiling rand_core v0.6.4
   Compiling rand v0.8.5
   Compiling phf_shared v0.11.2
   Compiling ryu v1.0.18
   Compiling phf_generator v0.11.2
   Compiling anki_io v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/io)
   Compiling phf_macros v0.11.2
   Compiling arrayvec v0.7.6
   Compiling num-format v0.4.4
   Compiling tinystr v0.7.6
   Compiling unic-langid-impl v0.9.5
   Compiling unic-langid-macros-impl v0.9.5
   Compiling unic-langid-macros v0.9.5
   Compiling unic-langid v0.9.5
   Compiling intl-memoizer v0.5.2
   Compiling fluent-syntax v0.11.1
   Compiling intl_pluralrules v7.0.2
   Compiling fluent-langneg v0.13.0
   Compiling phf v0.11.2
   Compiling fluent-bundle v0.15.3
   Compiling fluent v0.16.1
   Compiling serde v1.0.210
   Compiling anki_i18n v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/i18n)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 44s
ninja: build stopped: subcommand failed.

Build failed.

1 Like

If your glibc version is 2.35+ on AMD64 or 2.39+ on ARM64, you can skip the rest of this section.

Have you tried the steps in anki/docs/linux.md at main · ankitects/anki · GitHub?

The link you gave me says:

Anki requires a recent glibc.
If your glibc version is 2.35+ on AMD64 or 2.39+ on ARM64, you can skip the rest of this section.

According to ldd --version my glibc version is new enough:

ldd (Debian GLIBC 2.40-5) 2.40
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

I still went ahead and redid this:

sudo apt install python3-pyqt6.qt{quick,webengine} python3-venv pyqt6-dev-tools

I was missing pyqt6-dev-tools, but installing it didn’t change the result

Log
Finished `release` profile [optimized] target(s) in 0.25s
[2/12; 7 active; 0.145s] qt:aqt:forms
FAILED: /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/about_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/about_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addcards_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addcards_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addfield_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addfield_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addmodel_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addmodel_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addonconf_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addonconf_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addons_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/addons_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browser_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browser_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browserdisp_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browserdisp_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browseropts_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/browseropts_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/changemap_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/changemap_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/changemodel_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/changemodel_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/clayout_top_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/clayout_top_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/customstudy_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/customstudy_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/dconf_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/dconf_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/debug_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/debug_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/editcurrent_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/editcurrent_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/edithtml_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/edithtml_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/emptycards_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/emptycards_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/exporting_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/exporting_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/fields_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/fields_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/filtered_deck_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/filtered_deck_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/finddupes_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/finddupes_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/findreplace_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/findreplace_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/forget_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/forget_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/getaddons_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/getaddons_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/importing_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/importing_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/main_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/main_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/modelopts_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/modelopts_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/models_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/models_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/preferences_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/preferences_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/preview_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/preview_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/profiles_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/profiles_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/progress_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/progress_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/reposition_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/reposition_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/setgroup_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/setgroup_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/setlang_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/setlang_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/stats_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/stats_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/studydeck_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/studydeck_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/synclog_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/synclog_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/taglimit_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/taglimit_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/template_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/template_qt6.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/widgets_qt5.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/widgets_qt6.py 
/home/anon/Downloads/anki/Source_Code/anki/out/rust/release/runner run /home/anon/Downloads/anki/Source_Code/anki/out/pyenv/bin/python qt/tools/build_ui.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/about_qt5.py
Traceback (most recent call last):
  File "/home/anon/Downloads/anki/Source_Code/anki/qt/tools/build_ui.py", line 12, in <module>
    from PyQt6.uic import compileUi
ModuleNotFoundError: No module named 'PyQt6'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/anon/Downloads/anki/Source_Code/anki/qt/tools/build_ui.py", line 16, in <module>
    from PyQt5.uic import compileUi  # type: ignore
ModuleNotFoundError: No module named 'PyQt5'
Failed with code Some(1): /home/anon/Downloads/anki/Source_Code/anki/out/pyenv/bin/python qt/tools/build_ui.py /home/anon/Downloads/anki/Source_Code/anki/out/qt/_aqt/forms/about_qt5.py
[7/12; 2 active; 12.353s] ts:editor
▲ [WARNING] sass warning: 32 repetitive deprecation warnings omitted.
Run in verbose mode to see all warnings. [plugin sass-plugin]

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use math.unit instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:10:10:
      10 │ unit($num)
         ╵           ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use math.unit instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:10:15:
      10 │ unit($prev-num)
         ╵                ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] red() is deprecated. Suggestion:

color.channel($color, "red", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:36:10:
      36 │ red($value)
         ╵           ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] green() is deprecated. Suggestion:

color.channel($color, "green", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:36:13:
      36 │ green($value)
         ╵              ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] red() is deprecated. Suggestion:

color.channel($color, "red", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:184:9:
      184 │ red($color)
          ╵          ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] green() is deprecated. Suggestion:

color.channel($color, "green", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:185:9:
      185 │ green($color)
          ╵          ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] blue() is deprecated. Suggestion:

color.channel($color, "blue", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:186:9:
      186 │ blue($color)
          ╵          ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use color.mix instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:206:10:
      206 │ mix(white, $color, $weight)
          ╵           ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use color.mix instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:211:10:
      211 │ mix(black, $color, $weight)
          ╵           ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use color.mix instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    node_modules/bootstrap/scss/_variables.scss:341:22:
      341 │ mix($gray-100, $white)
          ╵                       ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    node_modules/bootstrap/scss/_variables.scss:1750:8:
      1750 │ "variables-dark"
           ╵         ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/lib/sass/_button-mixins.scss:6:8:
      6 │ "bootstrap/scss/functions"
        ╵         ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/lib/sass/_button-mixins.scss:7:8:
      7 │ "bootstrap/scss/variables"
        ╵         ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:8:7:
      8 │ import "./legacy.scss";
        ╵        ~~~~~~~~~~~~~~~

▲ [WARNING] sass warning: 183 repetitive deprecation warnings omitted.
Run in verbose mode to see all warnings. [plugin sass-plugin]

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] red() is deprecated. Suggestion:

color.channel($color, "red", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:36:10:
      36 │ red($value)
         ╵           ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] green() is deprecated. Suggestion:

color.channel($color, "green", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:36:13:
      36 │ green($value)
         ╵              ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] red() is deprecated. Suggestion:

color.channel($color, "red", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:184:9:
      184 │ red($color)
          ╵          ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] green() is deprecated. Suggestion:

color.channel($color, "green", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:185:9:
      185 │ green($color)
          ╵          ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] blue() is deprecated. Suggestion:

color.channel($color, "blue", $space: rgb)

More info: https://sass-lang.com/d/color-functions [plugin sass-plugin]

    node_modules/bootstrap/scss/_functions.scss:186:9:
      186 │ blue($color)
          ╵          ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Sass's behavior for declarations that appear after nested
rules will be changing to match the behavior specified by CSS in an upcoming
version. To keep the existing behavior, move the declaration above the nested
rule. To opt into the new behavior, wrap the declaration in `& {}`.

More info: https://sass-lang.com/d/mixed-decls [plugin sass-plugin]

    node_modules/bootstrap/scss/_reboot.scss:502:2:
      502 │ font-weight: $legend-font-weight
          ╵   ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Sass's behavior for declarations that appear after nested
rules will be changing to match the behavior specified by CSS in an upcoming
version. To keep the existing behavior, move the declaration above the nested
rule. To opt into the new behavior, wrap the declaration in `& {}`.

More info: https://sass-lang.com/d/mixed-decls [plugin sass-plugin]

    node_modules/bootstrap/scss/_reboot.scss:503:2:
      503 │ line-height: inherit
          ╵   ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/editor/editor-base.scss:3:8:
      3 │ "../lib/sass/base"
        ╵         ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/editor/editor-base.scss:6:8:
      6 │ "bootstrap/scss/buttons"
        ╵         ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/editor/editor-base.scss:7:8:
      7 │ "bootstrap/scss/button-group"
        ╵         ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/editor/editor-base.scss:8:8:
      8 │ "../lib/sass/bootstrap-tooltip"
        ╵         ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use meta.type-of instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/lib/sass/_functions.scss:13:15:
      13 │ type-of($value)
         ╵                ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use meta.type-of instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/lib/sass/_functions.scss:15:15:
      15 │ type-of($value)
         ╵                ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use meta.type-of instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/lib/sass/_functions.scss:21:12:
      21 │ type-of($value)
         ╵             ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use meta.type-of instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/lib/sass/_functions.scss:33:15:
      33 │ type-of($value)
         ╵                ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use map.merge instead.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/lib/sass/_functions.scss:38:10:
      38 │ map-merge(
         ╵           ^

                $output,
                (#{"comment"}#{$next-name}: list.nth($value, 1))
            )

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import [plugin sass-plugin]

    ts/lib/sass/base.scss:24:8:
      24 │ "bootstrap/scss/bootstrap-reboot"
         ╵         ^

  The plugin "sass-plugin" was triggered by this import

    ts/editor/base.ts:9:7:
      9 │ import "./editor-base.scss";
        ╵        ~~~~~~~~~~~~~~~~~~~~

▲ [WARNING] "import.meta" is not available with the "iife" output format and will be empty [empty-import-meta]

    ts/lib/components/Icon.svelte:11:5:
      11 │   if (import.meta.env) {
         ╵       ~~~~~~~~~~~

  You need to set the output format to "esm" for "import.meta" to work correctly.

[8/12; 1 active; 182.037s] pylib:rsbridge
   Compiling image v0.24.9
   Compiling axum-macros v0.4.2
   Compiling proc-macro-crate v3.2.0
   Compiling syn v1.0.109
   Compiling anki_proto v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/proto)
   Compiling sha1 v0.10.6
   Compiling webpki-roots v0.26.6
   Compiling headers-core v0.3.0
   Compiling indexmap v2.6.0
   Compiling burn-dataset v0.13.2
   Compiling burn-core v0.13.2
   Compiling blake3 v1.5.4
   Compiling memoffset v0.9.1
   Compiling iana-time-zone v0.1.61
   Compiling burn-train v0.13.2
   Compiling axum v0.7.7
   Compiling unic-common v0.9.0
   Compiling base64ct v1.6.0
   Compiling pulldown-cmark v0.9.6
   Compiling unicode-width v0.1.14
   Compiling base64 v0.21.7
   Compiling unic-char-range v0.9.0
   Compiling nonempty v0.7.0
   Compiling tinyvec_macros v0.1.1
   Compiling tinyvec v1.8.0
   Compiling forwarded-header-value v0.1.1
   Compiling unic-char-property v0.9.0
   Compiling headers v0.4.0
   Compiling getopts v0.2.21
   Compiling password-hash v0.5.0
   Compiling unic-ucd-version v0.9.0
   Compiling burn v0.13.2
   Compiling chrono v0.4.38
   Compiling anki v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib)
   Compiling priority-queue v2.1.1
   Compiling hyper-rustls v0.27.3
   Compiling num_enum_derive v0.7.3
   Compiling html5ever v0.27.0
   Compiling anki_i18n v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/rslib/i18n)
   Compiling mime_guess v2.0.5
   Compiling zstd v0.13.2
   Compiling pyo3-macros-backend v0.22.5
   Compiling fluent v0.16.1
   Compiling sha2 v0.10.8
   Compiling hmac v0.12.1
   Compiling ndarray-rand v0.14.0
   Compiling pyo3 v0.22.5
   Compiling prost v0.13.3
   Compiling tokio-util v0.7.12
   Compiling tokio-socks v0.5.2
   Compiling futures-executor v0.3.31
   Compiling itertools v0.12.1
   Compiling pin-project-internal v1.1.6
   Compiling ipnet v2.10.1
   Compiling snowflake v1.3.0
   Compiling arrayref v0.3.9
   Compiling constant_time_eq v0.3.1
   Compiling unicode-segmentation v1.12.0
   Compiling serde_tuple_macros v0.5.0
   Compiling base64 v0.22.1
   Compiling minimal-lexical v0.2.1
   Compiling matches v0.1.10
   Compiling unic-ucd-category v0.9.0
   Compiling nom v7.1.3
   Compiling reqwest v0.12.8
   Compiling serde_tuple v0.5.0
   Compiling convert_case v0.6.0
   Compiling ammonia v4.0.0
   Compiling pin-project v1.1.6
   Compiling id_tree v1.8.0
   Compiling fsrs v2.0.2
   Compiling num_enum v0.7.3
   Compiling futures v0.3.31
   Compiling pbkdf2 v0.12.2
   Compiling pyo3-macros v0.22.5
   Compiling async-compression v0.4.17
   Compiling serde-aux v4.5.0
   Compiling axum-extra v0.9.4
   Compiling axum-client-ip v0.6.1
   Compiling unicode-normalization v0.1.24
   Compiling pyo3-ffi v0.22.5
   Compiling zip v0.6.6
   Compiling tower-http v0.5.2
   Compiling envy v0.4.2
   Compiling serde_repr v0.1.19
   Compiling coarsetime v0.1.34
   Compiling difflib v0.4.0
   Compiling percent-encoding-iri v2.2.0 (https://github.com/ankitects/rust-url.git?rev=bb930b8d089f4d30d7d19c12e54e66191de47b88#bb930b8d)
   Compiling hex v0.4.3
   Compiling unindent v0.2.3
   Compiling htmlescape v0.3.1
   Compiling rsbridge v0.0.0 (/home/anon/Downloads/anki/Source_Code/anki/pylib/rsbridge)
   Compiling indoc v2.0.5
   Compiling data-encoding v2.6.0
warning: elided lifetime has a name
  --> rslib/src/card_rendering/parser.rs:88:33
   |
86 | fn trailing_whitespace0<'parser, 's, P, O>(parser: P) -> impl FnMut(&'s str) -> IResult<O>
   |                                  -- lifetime `'s` declared here
87 | where
88 |     P: FnMut(&'s str) -> IResult<O> + 'parser,
   |                                 ^ this elided lifetime gets resolved as `'s`
   |
   = note: `#[warn(elided_named_lifetimes)]` on by default

warning: elided lifetime has a name
  --> rslib/src/card_rendering/parser.rs:86:88
   |
86 | fn trailing_whitespace0<'parser, 's, P, O>(parser: P) -> impl FnMut(&'s str) -> IResult<O>
   |                                  -- lifetime `'s` declared here                        ^ this elided lifetime gets resolved as `'s`

warning: elided lifetime has a name
  --> rslib/src/card_rendering/parser.rs:96:36
   |
94 | fn is_not0<'parser, 'arr: 'parser, 's: 'parser>(
   |                                    -- lifetime `'s` declared here
95 |     arr: &'arr str,
96 | ) -> impl FnMut(&'s str) -> IResult<&'s str> + 'parser {
   |                                    ^ this elided lifetime gets resolved as `'s`

warning: elided lifetime has a name
   --> rslib/src/card_rendering/parser.rs:123:40
    |
121 |     fn opening_parser<'name, 's: 'name>(
    |                              -- lifetime `'s` declared here
122 |         name: &'name str,
123 |     ) -> impl FnMut(&'s str) -> IResult<Vec<(&str, &str)>> + 'name {
    |                                        ^ this elided lifetime gets resolved as `'s`

warning: elided lifetime has a name
   --> rslib/src/card_rendering/parser.rs:123:46
    |
121 |     fn opening_parser<'name, 's: 'name>(
    |                              -- lifetime `'s` declared here
122 |         name: &'name str,
123 |     ) -> impl FnMut(&'s str) -> IResult<Vec<(&str, &str)>> + 'name {
    |                                              ^ this elided lifetime gets resolved as `'s`

warning: elided lifetime has a name
   --> rslib/src/card_rendering/parser.rs:123:52
    |
121 |     fn opening_parser<'name, 's: 'name>(
    |                              -- lifetime `'s` declared here
122 |         name: &'name str,
123 |     ) -> impl FnMut(&'s str) -> IResult<Vec<(&str, &str)>> + 'name {
    |                                                    ^ this elided lifetime gets resolved as `'s`

warning: elided lifetime has a name
   --> rslib/src/card_rendering/parser.rs:151:40
    |
149 |     fn closing_parser<'parser, 'name: 'parser, 's: 'parser>(
    |                                                -- lifetime `'s` declared here
150 |         name: &'name str,
151 |     ) -> impl FnMut(&'s str) -> IResult<()> + 'parser {
    |                                        ^ this elided lifetime gets resolved as `'s`

warning: elided lifetime has a name
   --> rslib/src/card_rendering/parser.rs:159:40
    |
157 |     fn content_parser<'parser, 'name: 'parser, 's: 'parser>(
    |                                                -- lifetime `'s` declared here
158 |         name: &'name str,
159 |     ) -> impl FnMut(&'s str) -> IResult<&str> + 'parser {
    |                                        ^ this elided lifetime gets resolved as `'s`

warning: elided lifetime has a name
   --> rslib/src/card_rendering/parser.rs:159:41
    |
157 |     fn content_parser<'parser, 'name: 'parser, 's: 'parser>(
    |                                                -- lifetime `'s` declared here
158 |         name: &'name str,
159 |     ) -> impl FnMut(&'s str) -> IResult<&str> + 'parser {
    |                                         ^ this elided lifetime gets resolved as `'s`

warning: `anki` (lib) generated 9 warnings
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 01s
ninja: build stopped: subcommand failed.

Build failed.

On modern Ubuntu, you’ll also need ‘sudo apt remove python3-protobuf’
Debian doesn’t have this package, so I skipped it.

I know your link stated I don’t need to do these steps if my glibc version is recent enough, but I guess I can try it anyways. Should I do these things:

export PYTHONPATH=/usr/lib/python3/dist-packages
export PYTHON_BINARY=/usr/bin/python3

inside of that pyenv or outside of it?

Also: considering it did build and run if I pip installed pyqt5 and pyqt6 into ankis pyenv, can that really be an issue?

1 Like

Is it possible that the code is cached somewhere and not rebuild for some reason? Even if I completely remove entire folders like e.g. ts/editor/editor-toolbar/ it still builds and works fine, as if I had never changed anything.

Changing things in e.g. qt/aqt/ on the other hand does rebuild the python stuff. But the things in ts/ don’t seem to change. Am I not meant to edit the files there maybe?
It doesn’t actually… It did work for me with the current stable branch but doesn’t with the current master branch. The thing I did different was using ankis generated pyenv in the current master. Maybe llama was on the right track. I’ll just create a separate pyenv and see if it works. I’ll update later.

Update

  1. I removed another pyenv that was in my home directory and which was apparently used instead of the system python installtion.
  2. Then, with system python:
python3 -m venv ./pyvenv
./pyvenv/bin/python -m pip install aqt[qt5]
./pyvenv/bin/python -m pip install aqt[qt6]
source ./pyvenv/bin/activate
git clone --single-branch --branch=main https://github.com/ankitects anki.git anki
cd anki/
clear && ./run

And it works!

I don’t understand what kind of black magic that is though. I only have one copy of anki source code on my system and anki was apparently build somehow with files from who knows where. I mean, compare the about > copy debug info from this successfull build with the one I provided in my question above:

Anki 25.01 (64ca9093) (src) (ao)
Python 3.9.18 Qt 6.8.1 PyQt 6.8.0
Platform: Linux-6.12.6-amd64-x86_64-with-glibc2.40

===Add-ons (active)===
(add-on provided name [Add-on folder, installed at, version, is config changed])
AnkiWebView Inspector ['31746032', 2023-06-27T21:26, 'None', '']
Image Occlusion Enhanced ['1374772155', 2022-04-09T09:15, 'None', '']
Review Heatmap ['1771074083', 2022-06-30T03:43, 'None', '']
Study Time Stats ['1247171202', 2024-02-24T17:59, 'None', '']

===IDs of active AnkiWeb add-ons===
1247171202 1374772155 1771074083 31746032

===Add-ons (inactive)===
(add-on provided name [Add-on folder, installed at, version, is config changed])

I’d still like to know how that is possible. But the problem is solved. Thanks @llama , you had the right hunch here! I’ll mark your post as the answer!

(and yes, changes to SuperscriptButton.svelte are applied now)

1 Like

None of those steps are necessary if your goal is to run from a Git checkout. I suspect you were accidentally invoking the version from PyPI instead of running the locally-checked-out build before.

Maybe on my system this is different. If I try to pip install into the system python, then debian throws an error stating this could break the system and I should be using the venv instead.

Not sure what that means as my knowledge around python is quite limited. Do you mean the issue happened because I used the python venv inside the ./out folder in the first try?

It’s more that you should not be running pip install aqt at all.

The aqt package is part of the Anki desktop app codebase (see <repo>/qt/aqt) – specifically the Qt UI part of the app.

You should be building the aqt package from source when you call ./run.

When you are running pip install aqt[qt6] you are trying to install a prebuilt version of that package that has been uploaded to PyPI. If you use this prebuilt version it will obviously not include any local changes you have made.

The “correct” solution is to try to fix whatever is wrong with PyQt on your system so aqt can be built normally.

I’m not sure exactly what happens when you run pip install aqt[qt6] just to get PyQt and then run ./run. It might just overwrite the prebuilt aqt with your locally built version and work fine, it might seem to work but be subtly broken in weird ways.

Well, I did it like described above and all changes (including those in the aqt folder) get properly build.

I don’t know much about python but now I’m getting confused. Dae said:

So I tried it again:

  1. I deleted anki/ and pyenv/ folders.
  2. git clone --single-branch --branch=main https://github.com/ankitects/anki.git anki
  3. cd anki/
  4. clear && ./run
  5. It again compiles lots of things and runs just fine.

I assume anki is using my system python now, which has the qt libs installed (because I followed the docs). So I ran sudo apt autopurge python3-pyqt6.qt{quick,webengine} python3-venv pyqt6-dev-tools python3-pyqt6

So according to python3 -m pip list I got these packages now:

Package                   Version
------------------------- ----------
alabaster                 0.7.16
apt-listchanges           4.8
attrs                     24.2.0
autocommand               2.2.2
babel                     2.16.0
bcrypt                    4.2.0
Brotli                    1.1.0
certifi                   2024.12.14
chardet                   5.2.0
charset-normalizer        3.4.0
cryptography              43.0.0
dbus-python               1.3.2
defusedxml                0.7.1
distro                    1.9.0
docutils                  0.21.2
envs                      1.2.6
gyp-next                  0.16.2
idna                      3.8
imagesize                 1.4.1
importlib_metadata        8.5.0
inflect                   7.3.1
jaraco.context            6.0.0
jaraco.functools          4.1.0
jaraco.text               4.0.0
Jinja2                    3.1.3
jsonpointer               2.4
jsonschema                4.19.2
jsonschema-specifications 2023.12.1
keymapper                 0.2
MarkupSafe                2.1.5
meson                     1.6.1
more-itertools            10.5.0
mutagen                   1.47.0
nftables                  0.1
olefile                   0.47
packaging                 24.2
pillow                    10.4.0
pip                       24.3.1
pycairo                   1.26.1
pycryptodomex             3.20.0
Pygments                  2.18.0
PyGObject                 3.50.0
python-apt                2.9.6+b1
python-debian             0.1.49
python-debianbts          4.1.1
PyYAML                    6.0.2
referencing               0.35.1
reportbug                 13.0.2
requests                  2.32.3
rfc3987                   1.3.8
roman                     4.2
rpds-py                   0.21.0
setuptools                75.6.0
snowballstemmer           2.2.0
Sphinx                    8.1.3
terminaltables            3.1.10
typeguard                 4.4.1
typing_extensions         4.12.2
uritemplate               4.1.1
urllib3                   2.2.3
webcolors                 1.13
websockets                14.1
wheel                     0.45.1
Yapps2                    2.2.1
yt-dlp                    2025.1.12
zipp                      3.21.0

Not sure about what needs those packages or if I could remove all of them, but at least pyqt6 and the likes are gone now. So I tried the above building steps again.

And it again works just fine. Not sure what I had messed up. But now it’s working fine. So thanks everyone!

I think it’s all just part of the joy of python. Python packages that wrap native libraries are often a huge pain that break at random for seemingly no good reason.

I’m glad it’s all working out for you now. :slight_smile:

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.