jaraco / irc

Full-featured Python IRC library for Python.
MIT License
392 stars 87 forks source link

importlib_metadata error occur when packed with cx_Freeze #159

Closed kutu closed 5 years ago

kutu commented 5 years ago

version: 17.1

I pack my chat app with cx_Freeze, this is what I get when launch chat.exe

Traceback (most recent call last):
  File "__startup__.py", line 14, in run
  File "Console.py", line 26, in run
  File "chat.py", line 14, in <module>
    from irc.client import SimpleIRCClient, ServerConnectionError
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
  File "irc\client.py", line 70, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
  File "importlib_metadata\__init__.py", line 480, in <module>
  File "importlib_metadata\__init__.py", line 447, in version
  File "importlib_metadata\__init__.py", line 412, in distribution
  File "importlib_metadata\__init__.py", line 178, in from_name
importlib_metadata.PackageNotFoundError: importlib_metadata

this doesn't happen with 17.0 version

jaraco commented 5 years ago

Sorry I did not respond to this sooner. I missed the e-mail.

The issue lies with importlib_metadata, although really with cx_freeze, because importlib_metadata can't detect its own version when packaged using cx_Freeze.

The proper solution will be for cx_Freeze to support exposing the metadata for the packages that it freezes. It may be possible for importlib_metadata to bypass the issue (leaving it to consumers like this to also bypass the issue). For now, I'm closing this pending resolution in the upstream ticket.