You are not logged in.

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

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

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,290

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: 13

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,290

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: 13

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: 55

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: 13

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

#8 Today 05:48:08

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

Re: Displaycal and python 3.14

Just a quick update. Went to use Displaycal today and ran into the exact same issue as before. I am using displaycal 3.9.17-4 with python 3.14.6-1 and a x-rite i1Studio spectrometer. I have used the same spectrometer before without any issues.

Offline

#9 Today 08:00:59

seth
Member
From: Won't reply 2 private help req
Registered: 2012-09-03
Posts: 76,159

Online

#10 Today 18:26:43

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

Re: Displaycal and python 3.14

It's this error:

JSONEncoder.__init__() got an unexpected keyword argument 'encoding'



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'

Displaycal operates properly while controlling the spectrometer, and errors while it's computing the icc file. I tried modifying demjson_compat.py to remove the encoding argument, but I'm a complete rookie with python so I'm not sure I did it right (and it didn't work, just resulted in displaycal hanging without an error message).

Last edited by glenjo (Today 18:29:30)

Offline

Board footer

Powered by FluxBB