Skip to content

Replace deprecated pkg_resources with importlib#117

Open
songmeo wants to merge 8 commits intodronecan:masterfrom
songmeo:master
Open

Replace deprecated pkg_resources with importlib#117
songmeo wants to merge 8 commits intodronecan:masterfrom
songmeo:master

Conversation

@songmeo
Copy link

@songmeo songmeo commented Mar 21, 2026

Summary

  • Replace pkg_resources with importlib.resources in widgets/__init__.py for loading the app icon
  • Move pkg_resources and setuptools.archive_util imports in setup.py into the Windows-only MSI build block where they're actually used
  • Replace pkg_resources with importlib.metadata in pip_sizes.py

Fixes the ModuleNotFoundError: No module named 'pkg_resources' that breaks CI on all Python versions (3.9, 3.10, 3.11) and installation on systems where setuptools is not bundled.

Differences from #115

  • Uses fully qualified importlib.resources.files() calls as suggested by @joshanne in Replace pkg_resources with importlib #115
  • Also moves pkg_resources import in setup.py into the Windows-only MSI build block instead of replacing it, since it's only needed there

This PR was co-authored with Claude Code (AI).

songmeo added 3 commits March 21, 2026 20:17
pkg_resources is no longer bundled by default in newer Python versions,
causing ModuleNotFoundError on startup.
pkg_resources is only used for unpacking eggs during cx_Freeze MSI
builds. Importing it at module level causes ModuleNotFoundError on
systems where setuptools is not installed.
Address maintainer feedback: use import importlib.resources with
fully qualified calls to avoid shadowing application variables.
Also replace pkg_resources in pip_sizes.py with importlib.metadata.
@joshanne
Copy link
Collaborator

joshanne commented Mar 23, 2026

At this stage, i'm in favour of #115 still...

For example, during the build stage, the imported library metadata is not showing the package that is being included:

python pip_sizes.py
--------alpha-sorted-package-names-----------------
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
<importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB

--------size-sorted-package-info-----------------
14353 <importlib.metadata.PathDistribution object at 0x000002272903E590>: 14.353 KB
19976 <importlib.metadata.PathDistribution object at 0x000002272903F790>: 19.976 KB
23057 <importlib.metadata.PathDistribution object at 0x000002272903E2F0>: 23.057 KB
47458 <importlib.metadata.PathDistribution object at 0x000002272903EF50>: 47.458 KB
52569 <importlib.metadata.PathDistribution object at 0x000002272903F7F0>: 52.569 KB
69702 <importlib.metadata.PathDistribution object at 0x000002272903E5F0>: 69.702 KB
76125 <importlib.metadata.PathDistribution object at 0x000002272903E170>: 76.125 KB
77887 <importlib.metadata.PathDistribution object at 0x000002272903F5B0>: 77.887 KB
103778 <importlib.metadata.PathDistribution object at 0x000002272903E110>: 103.778 KB
109840 <importlib.metadata.PathDistribution object at 0x000002272903E290>: 109.84 KB
140339 <importlib.metadata.PathDistribution object at 0x000002272903E650>: 140.339 KB
146018 <importlib.metadata.PathDistribution object at 0x000002272903E710>: 146.018 KB
149809 <importlib.metadata.PathDistribution object at 0x000002272903EA70>: 149.809 KB
159071 <importlib.metadata.PathDistribution object at 0x000002272903FA90>: 159.071 KB
186581 <importlib.metadata.PathDistribution object at 0x000002272903EE30>: 186.581 KB
257060 <importlib.metadata.PathDistribution object at 0x000002272903E830>: 257.06 KB
278320 <importlib.metadata.PathDistribution object at 0x000002272903E1D0>: 278.32 KB
339651 <importlib.metadata.PathDistribution object at 0x000002272903F610>: 339.651 KB
360941 <importlib.metadata.PathDistribution object at 0x000002272903FA30>: 360.941 KB
391781 <importlib.metadata.PathDistribution object at 0x000002272903F550>: 391.781 KB
419051 <importlib.metadata.PathDistribution object at 0x000002272903F9D0>: 419.051 KB
424435 <importlib.metadata.PathDistribution object at 0x000002272903ED10>: 424.435 KB
431342 <importlib.metadata.PathDistribution object at 0x000002272903E6B0>: 431.342 KB
547874 <importlib.metadata.PathDistribution object at 0x000002272903ED70>: 547.874 KB
551226 <importlib.metadata.PathDistribution object at 0x000002272903E4D0>: 551.226 KB
560971 <importlib.metadata.PathDistribution object at 0x000002272903F8B0>: 560.971 KB
574913 <importlib.metadata.PathDistribution object at 0x000002272903EB90>: 574.913 KB
596867 <importlib.metadata.PathDistribution object at 0x000002272903E890>: 596.867 KB
627338 <importlib.metadata.PathDistribution object at 0x000002272903EA10>: 627.338 KB
669234 <importlib.metadata.PathDistribution object at 0x000002272903EEF0>: 669.234 KB
713753 <importlib.metadata.PathDistribution object at 0x000002272903E7D0>: 713.753 KB
753336 <importlib.metadata.PathDistribution object at 0x000002272903F970>: 753.336 KB
785470 <importlib.metadata.PathDistribution object at 0x000002272903F4F0>: 785.47 KB
791996 <importlib.metadata.PathDistribution object at 0x000002272903E530>: 791.996 KB
1069382 <importlib.metadata.PathDistribution object at 0x000002272903D360>: 1069.382 KB
1153753 <importlib.metadata.PathDistribution object at 0x000002272903E350>: 1153.753 KB
2574656 <importlib.metadata.PathDistribution object at 0x000002272903EE90>: 2574.656 KB
3101185 <importlib.metadata.PathDistribution object at 0x000002272903F850>: 3101.185 KB
4775131 <importlib.metadata.PathDistribution object at 0x000002272903E8F0>: 4775.131 KB
5002894 <importlib.metadata.PathDistribution object at 0x000002272903E9B0>: 5002.894 KB
5819666 <importlib.metadata.PathDistribution object at 0x000002272903F670>: 5819.666 KB
6187874 <importlib.metadata.PathDistribution object at 0x000002272903F1F0>: 6187.874 KB
6272370 <importlib.metadata.PathDistribution object at 0x000002272903F490>: 6272.37 KB
7439907 <importlib.metadata.PathDistribution object at 0x000002272903EFB0>: 7439.907 KB
8478305 <importlib.metadata.PathDistribution object at 0x000002272903EDD0>: 8478.305 KB
9232622 <importlib.metadata.PathDistribution object at 0x000002272903EB30>: 9232.622 KB
12253059 <importlib.metadata.PathDistribution object at 0x000002272903EAD0>: 12253.059 KB
29894910 <importlib.metadata.PathDistribution object at 0x000002272903ECB0>: 29894.91 KB
31125509 <importlib.metadata.PathDistribution object at 0x000002272903E410>: 31125.509 KB
69374094 <importlib.metadata.PathDistribution object at 0x000002272903F010>: 69374.094 KB
149055862 <importlib.metadata.PathDistribution object at 0x000002272903F0D0>: 149055.862 KB
Total 364.26 MByte

Another example of an issue, is windows doesn't generate the build.

python setup.py bdist_msi
Traceback (most recent call last):
  File "C:\Users\MyUser\Workspace\gui_tool\setup.py", line 116, in <module>
    import pkg_resources
ModuleNotFoundError: No module named 'pkg_resources'

Copy link
Collaborator

@joshanne joshanne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See above.

Ultimately, there are issues with build artefacts being generated on this branch under windows - i'm currently still in favour of #115.

@songmeo
Copy link
Author

songmeo commented Mar 23, 2026

@joshanne Updated the PR based on your feedback:

  • Fixed pip_sizes.py to display package names and versions instead of PathDistribution objects
  • Replaced pkg_resources with importlib.metadata in the Windows MSI build block

Pipeline passes on my fork: https://github.com/songmeo/gui_tool/actions

Main difference with #115: this PR scopes importlib.metadata and setuptools.archive_util imports inside the Windows-only MSI build block, since they're not used on Linux.

@songmeo songmeo requested a review from joshanne March 23, 2026 14:05
@songmeo
Copy link
Author

songmeo commented Mar 23, 2026

Additionally, this PR now includes the multiprocessing spawn fix from #116 (Debian 13+ / recent Fedora startup issue).

@songmeo songmeo changed the title Replace deprecated pkg_resources with importlib.resources Replace deprecated pkg_resources with importlib Mar 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants