Bug 2543438

Summary: spyder does not launch due to missing font files
Product: [Fedora] Fedora Reporter: Eric M <majzoube>
Component: fontawesome-fontsAssignee: Jerry James <loganjerry>
Status: ASSIGNED --- QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 45CC: alberto.riebel1440, davide, fonts-bugs, jamatos, jonathan, loganjerry, mrunge, neuro-sig, prgutier, rosset.filipe
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Eric M 2026-09-29 18:13:51 UTC
Spyder fails to launch with the following message. The file fontawesome5-regular-webfont-5.15.4.ttf is a symlink to a non-existent file,

$ ll /usr/lib/python3.15/site-packages/qtawesome/fonts/fontawesome5-regular-webfont-5.15.4.ttf
lrwxrwxrwx. 1 root root 50 Jul 15 19:00 /usr/lib/python3.15/site-packages/qtawesome/fonts/fontawesome5-regular-webfont-5.15.4.ttf -> /usr/share/fontawesome/webfonts/fa-regular-400.ttf

------- SPYDER ERROR MESSAGE ----------

$ spyder
Traceback (most recent call last):
  File "/usr/bin/spyder", line 6, in <module>
    sys.exit(main())
             ~~~~^^
  File "/usr/lib/python3.15/site-packages/spyder/app/start.py", line 281, in main
    mainwindow.main(options, args)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/usr/lib/python3.15/site-packages/spyder/app/mainwindow.py", line 1405, in main
    mainwindow = create_window(MainWindow, app, splash, options, args)
  File "/usr/lib/python3.15/site-packages/spyder/app/utils.py", line 369, in create_window
    main.setup()
    ~~~~~~~~~~^^
  File "/usr/lib/python3.15/site-packages/spyder/app/mainwindow.py", line 684, in setup
    internal_plugins = find_internal_plugins()
  File "/usr/lib/python3.15/site-packages/spyder/app/find_plugins.py", line 45, in find_internal_plugins
    mod = importlib.import_module(entry_point.module)
  File "/usr/lib64/python3.15/importlib/__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1390, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1350, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1309, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 915, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 747, in exec_module
  File "<frozen importlib._bootstrap>", line 549, in _call_with_frames_removed
  File "/usr/lib/python3.15/site-packages/spyder/plugins/pylint/plugin.py", line 25, in <module>
    from spyder.plugins.pylint.confpage import PylintConfigPage
  File "/usr/lib/python3.15/site-packages/spyder/plugins/pylint/confpage.py", line 16, in <module>
    from spyder.plugins.pylint.main_widget import (MAX_HISTORY_ENTRIES,
                                                   MIN_HISTORY_ENTRIES,
                                                   PylintWidget)
  File "/usr/lib/python3.15/site-packages/spyder/plugins/pylint/main_widget.py", line 94, in <module>
    class CategoryItem(QTreeWidgetItem):
    ...<42 lines>...
            self.setIcon(0, icon)
  File "/usr/lib/python3.15/site-packages/spyder/plugins/pylint/main_widget.py", line 106, in CategoryItem
    'icon': ima.icon("convention")
            ~~~~~~~~^^^^^^^^^^^^^^
  File "/usr/lib/python3.15/site-packages/spyder/utils/icon_manager.py", line 466, in icon
    qta.load_font('spyder', 'spyder.ttf', 'spyder-charmap.json',
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                directory=self._resource['directory'])
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.15/site-packages/qtawesome/__init__.py", line 314, in load_font
    return _instance().load_font(prefix, ttf_filename, charmap_filename, directory)
           ~~~~~~~~~^^
  File "/usr/lib/python3.15/site-packages/qtawesome/__init__.py", line 162, in _instance
    _resource["iconic"] = IconicFont(*_BUNDLED_FONTS)
                          ~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.15/site-packages/qtawesome/iconic_font.py", line 368, in __init__
    self.load_font(*fargs)
    ~~~~~~~~~~~~~~^^^^^^^^
  File "/usr/lib/python3.15/site-packages/qtawesome/iconic_font.py", line 409, in load_font
    with open(os.path.join(directory, ttf_filename), "rb") as font_data:
         ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/python3.15/site-packages/qtawesome/fonts/fontawesome5-regular-webfont-5.15.4.ttf'


Reproducible: Always

Steps to Reproduce:
1.start spyder from the command line
2.
3.
Actual Results:
error message shown above

Expected Results:
spyder finds the font file and starts normally

Comment 1 Alberto Riebel 2026-11-04 16:17:49 UTC
Same issue here on Fedora 45, python3-QtAwesome-1.4.2-4.fc45 with fontawesome-fonts-web-7.3.1-1.fc45. The cause appears to be that fontawesome-fonts-web 7.3.1 only ships .woff2 files in /usr/share/fontawesome/webfonts/ (fa-brands-400, fa-regular-400, fa-solid-900, fa-v4compatibility), so the .ttf symlinks in qtawesome/fonts/ are dangling. dnf provides finds no package providing those .ttf files. Workaround: copy the real fonts from the python-QtAwesome source RPM over the broken symlinks.

Comment 2 Filipe Rosset 2026-11-04 16:28:05 UTC
(In reply to Alberto Riebel from comment #1)
> Same issue here on Fedora 45, python3-QtAwesome-1.4.2-4.fc45 with
> fontawesome-fonts-web-7.3.1-1.fc45. The cause appears to be that
> fontawesome-fonts-web 7.3.1 only ships .woff2 files in
> /usr/share/fontawesome/webfonts/ (fa-brands-400, fa-regular-400,
> fa-solid-900, fa-v4compatibility), so the .ttf symlinks in qtawesome/fonts/
> are dangling. dnf provides finds no package providing those .ttf files.
> Workaround: copy the real fonts from the python-QtAwesome source RPM over
> the broken symlinks.

yeap, there are 3-4 open bugs due this fontawesome-fonts issue (looks like it's from version 7x. onwards) -> python-QtAwesome -> spyder

@jjames could you please take a look and fix the fontawesome-fonts package ?

thank you.

Comment 4 Jerry James 2026-11-04 17:49:44 UTC
Hmmm, upstream stopped shipping TTF fonts in their release tarballs starting with FontAwesome 7. The tarballs now contain only OTF and WOFF2 fonts.

Can you use the OTF fonts instead?  They are in the fontawesome-7-brands-fonts and fontawesome-7-free-fonts packages.

Comment 5 Jerry James 2026-11-04 17:53:13 UTC
*** Bug 2526052 has been marked as a duplicate of this bug. ***

Comment 6 Filipe Rosset 2026-11-06 01:14:01 UTC
I sent this PR to fix the symlink in python-QtAwesome

https://src.fedoraproject.org/rpms/python-QtAwesome/pull-request/9

or maybe just symlink the .woff to .ttf files inside fontawesome-fonts

opc@testing:~$ ls -latr /usr/lib/python3.15/site-packages/qtawesome/fonts/fontawesome5-regular-webfont-5.15.4.ttf
lrwxrwxrwx. 1 root root 50 Jul 15 21:00 /usr/lib/python3.15/site-packages/qtawesome/fonts/fontawesome5-regular-webfont-5.15.4.ttf -> /usr/share/fontawesome/webfonts/fa-regular-400.ttf

opc@testing:~$ ls -latr /usr/share/fontawesome/webfonts/fa-regular-400*
-rw-r--r--. 1 root root 19548 Jul 14 21:00 /usr/share/fontawesome/webfonts/fa-regular-400.woff2

and then... the stack trace in spyder:
$ spyder
No matching fbConfigs or visuals found
glx: failed to create drisw screen
Traceback (most recent call last):
  File "/usr/bin/spyder", line 6, in <module>
    sys.exit(main())
             ~~~~^^
  File "/usr/lib/python3.15/site-packages/spyder/app/start.py", line 281, in main
    mainwindow.main(options, args)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/usr/lib/python3.15/site-packages/spyder/app/mainwindow.py", line 1405, in main
    mainwindow = create_window(MainWindow, app, splash, options, args)
  File "/usr/lib/python3.15/site-packages/spyder/app/utils.py", line 369, in create_window
    main.setup()
    ~~~~~~~~~~^^
  File "/usr/lib/python3.15/site-packages/spyder/app/mainwindow.py", line 684, in setup
    internal_plugins = find_internal_plugins()
  File "/usr/lib/python3.15/site-packages/spyder/app/find_plugins.py", line 45, in find_internal_plugins
    mod = importlib.import_module(entry_point.module)
  File "/usr/lib64/python3.15/importlib/__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1389, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1353, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1249, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 857, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 751, in exec_module
  File "<frozen importlib._bootstrap>", line 491, in _call_with_frames_removed
  File "/usr/lib/python3.15/site-packages/spyder/plugins/pylint/plugin.py", line 25, in <module>
    from spyder.plugins.pylint.confpage import PylintConfigPage
  File "/usr/lib/python3.15/site-packages/spyder/plugins/pylint/confpage.py", line 16, in <module>
    from spyder.plugins.pylint.main_widget import (MAX_HISTORY_ENTRIES,
                                                   MIN_HISTORY_ENTRIES,
                                                   PylintWidget)
  File "/usr/lib/python3.15/site-packages/spyder/plugins/pylint/main_widget.py", line 94, in <module>
    class CategoryItem(QTreeWidgetItem):
    ...<42 lines>...
            self.setIcon(0, icon)
  File "/usr/lib/python3.15/site-packages/spyder/plugins/pylint/main_widget.py", line 106, in CategoryItem
    'icon': ima.icon("convention")
            ~~~~~~~~^^^^^^^^^^^^^^
  File "/usr/lib/python3.15/site-packages/spyder/utils/icon_manager.py", line 457, in icon
    return qta.icon(*args, **kwargs)
           ~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.15/site-packages/qtawesome/__init__.py", line 268, in icon
    return _instance().icon(*names, **kwargs)
           ~~~~~~~~~^^
  File "/usr/lib/python3.15/site-packages/qtawesome/__init__.py", line 162, in _instance
    _resource["iconic"] = IconicFont(*_BUNDLED_FONTS)
                          ~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.15/site-packages/qtawesome/iconic_font.py", line 368, in __init__
    self.load_font(*fargs)
    ~~~~~~~~~~~~~~^^^^^^^^
  File "/usr/lib/python3.15/site-packages/qtawesome/iconic_font.py", line 409, in load_font
    with open(os.path.join(directory, ttf_filename), "rb") as font_data:
         ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/python3.15/site-packages/qtawesome/fonts/fontawesome5-regular-webfont-5.15.4.ttf'