You are not logged in.

#1 2026-02-05 01:19:48

vicbis
Member
From: Melbourne Australia
Registered: 2018-01-31
Posts: 11

Displaycal and python 3.14

Informational only.
The current version of 'displaycal' (3.9.17-3) is not compatible with the current version of 'python' ( 3.14.2 )
To get it to run properly I had to install 'pyenv' and install a version of python 3.13.
There does not seem to much activity at 'https://github.com/eoyilmaz/displaycal-py3' sad

Offline

#2 2026-02-05 07:37:59

arojas
Developer
From: Spain
Registered: 2011-10-09
Posts: 2,275

Re: Displaycal and python 3.14

Please specify what you mean by "is not compatible"

Offline

#3 2026-02-07 00:48:55

vicbis
Member
From: Melbourne Australia
Registered: 2018-01-31
Posts: 11

Re: Displaycal and python 3.14

Sorry about delay didn't have the Spyder with me.

vicb@amelia [ ~ ]$ displaycal
Traceback (most recent call last):
  File "/usr/bin/displaycal", line 4, in <module>
    from DisplayCAL.main import main
  File "/usr/lib/python3.14/site-packages/DisplayCAL/main.py", line 21, in <module>
    raise RuntimeError(
    ...<6 lines>...
    )
RuntimeError: Need Python version >= 3.8 <= 3.13, got 3.14.2
vicb@amelia [ ~ ]$ python -V
Python 3.14.2
vicb@amelia [ ~ ]$ pacman -Q | grep -e python\  -e displaycal 
displaycal 3.9.17-2
gst-python 1.26.10-2
python 3.14.2-2
python-dnspython 1:2.8.0-3
python-wxpython 1:4.2.3-4

Offline

#4 2026-02-07 01:40:20

arojas
Developer
From: Spain
Registered: 2011-10-09
Posts: 2,275

Re: Displaycal and python 3.14

you aren't using the current version of displaycal

Offline

#5 2026-02-07 03:34:41

vicbis
Member
From: Melbourne Australia
Registered: 2018-01-31
Posts: 11

Re: Displaycal and python 3.14

BTW I'm running this on a different box and updated displaycal

vicb@amelia [ ~ ]$ pacman -Q | grep displaycal
displaycal 3.9.17-3

It gets this far and stops.
This is the terminal dump and the informational window that is displayed shows the portion in the 'box' below.

.
.
Generating A2B1 table lookup input values...
cLUT grid res: 33
Looking up input values through A2B1 table (12 workers)...
Using CAM Jab for clipping
Acquired lock file: <DisplayCAL.main.AppLock object at 0x7f3366c1ba10>
displaycal 3.9.17 2025-09-11T10:20:26Z
arch rolling n/a x86_64
Python 3.14.2 (main, Jan  2 2026, 14:27:39) [GCC 15.2.1 20251112]
Faulthandler 
wxPython 4.2.3 gtk3 (phoenix) wxWidgets 3.2.9
Encoding: utf-8
File system encoding: utf-8
Loading /home/vicb/.config/dispcalGUI/dispcalGUI.ini
Loading /home/vicb/.config/dispcalGUI/dispcalGUI-testchart-editor.ini
Existing client using port 40365
Connecting to 40365...
Connected to 40365
Getting instance name
AppSocket.send start
data_to_send: b'getappname\n'
Sent scripting request, awaiting response...
Scripting client 127.0.0.1:43366 connected
Received scripting request from 127.0.0.1:43366: getappname
AppSocket.read() end
Got response: 'displaycal'
Notifying existing instance
AppSocket.send start
data_to_send: b'DisplayCAL\n'
Sent scripting request, awaiting response...
Received scripting request from 127.0.0.1:43366: DisplayCAL
NoneType: None
┌──────────────────────────────────────────────────────────────────────────────┐
│ Traceback (most recent call last):                                           │
│   File "/usr/lib/python3.14/site-packages/wx/core.py", line 3425, in         │
│ <lambda>                                                                     │
│     lambda event: event.callable(*event.args, **event.kw) )                  │
│                   ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^                    │
│   File "/usr/lib/python3.14/site-packages/DisplayCAL/wxwindows.py", line     │
│ 1383, in finish_processing                                                   │
│     state = self.get_app_state("plain")                                      │
│   File "/usr/lib/python3.14/site-packages/DisplayCAL/wxwindows.py", line     │
│ 1218, in get_app_state                                                       │
│     response = format_ui_element(win, format)                                │
│   File "/usr/lib/python3.14/site-packages/DisplayCAL/wxwindows.py", line     │
│ 8015, in format_ui_element                                                   │
│     (child.Label and " " + demjson.encode(child.Label)),                     │
│                            ~~~~~~~~~~~~~~^^^^^^^^^^^^^                       │
│   File "/usr/lib/python3.14/site-packages/DisplayCAL/demjson_compat.py",     │
│ line 153, in encode                                                          │
│     return json.dumps(                                                       │
│            ~~~~~~~~~~^                                                       │
│         obj,                                                                 │
│         ^^^^                                                                 │
│     ...<3 lines>...                                                          │
│         encoding=encoding or "utf-8",                                        │
│         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                        │
│     )                                                                        │
│     ^                                                                        │
│   File "/usr/lib/python3.14/json/__init__.py", line 238, in dumps            │
│     return cls(                                                              │
│            ~~~^                                                              │
│         skipkeys=skipkeys, ensure_ascii=ensure_ascii,                        │
│         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        │
│         check_circular=check_circular, allow_nan=allow_nan, indent=indent,   │
│         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   │
│         separators=separators, default=default, sort_keys=sort_keys,         │
│         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         │
│         **kw).encode(obj)                                                    │
│         ^^^^^                                                                │
│ TypeError: JSONEncoder.__init__() got an unexpected keyword argument         │
│ 'encoding'                                                                   │
└──────────────────────────────────────────────────────────────────────────────┘

I press the 'ok' button on the window that shows the error message
and then it hangs indefinitely on 'Create profile from measurement data...' window.
All that window shows is
an ever increasing 'Elapsed time'
and 'Remaining time' as '--:--:--'

Offline

#6 2026-02-22 09:13:42

glenjo
Member
From: Pacific NW
Registered: 2020-06-09
Posts: 46

Re: Displaycal and python 3.14

I see the exact same behavior here, and solved the problem the exact same way. I don't calibrate my monitor too often, and displaycal worked great the last time I used it (last fall).

Offline

#7 2026-03-06 01:04:11

vicbis
Member
From: Melbourne Australia
Registered: 2018-01-31
Posts: 11

Re: Displaycal and python 3.14

1: The wiki article needs updating ( https://wiki.archlinux.org/title/ICC_profiles ) . As following the instructions there will result in displaycal being unusable.
2: Why is this package still in the main repository? IMO it should be moved to AUR.

Offline

Board footer

Powered by FluxBB