marcelotduarte / cx_Freeze

cx_Freeze creates standalone executables from Python scripts, with the same performance, is cross-platform and should work on any platform that Python itself works on.
https://marcelotduarte.github.io/cx_Freeze/
Other
1.28k stars 210 forks source link

assert g_type != TYPE_NONE #2361

Closed cedk closed 1 month ago

cedk commented 2 months ago

Building exe with cx_Freeze for tryton does not work on 64 bits. When the executable is launched it raise this error:

...
File ".../lib/python3.11/importlib/__init__.py", lint 126, in import_module
 return _bootstrap._gcd_import(name[level:], package, level)
File ".../lib/python3.11/site-packages/gi/overrides/Pango.py", line 41, in <module>
 FontDescription = override(FontDescription)
File ".../lib/python3.11/site-packages/gi/overrides/__init__.py", line 189, in override
 assert g_type != TYPE_NONE
AssertionError

To Reproduce Running setup-freeze.py install_exe -d dist under MINGW64 with cx_Freeze-7.0.0 But when run under MINGW32 with cx_Freeze 6.15.10 (last version packaged), the executable works.

Desktop (please complete the following information):

Additional context When running the application directly under MINGW64, it is working.

marcelotduarte commented 2 months ago

I hope it's the regression I fixed in #2357 and backported to 7.0 in msys. This version should be released soon. Still in the queue to be published: https://packages.msys2.org/queue

Please test it when it is published and let me know. If not, give me more details.

mrichez-saluc commented 2 months ago

Got this error with the latest version (7.0.0-2):

running install_exe
running build_exe
Traceback (most recent call last):
  File "C:/msys64/home/adminsaluc/tryton/tryton/setup-freeze.py", line 125, in <module>
    setup(name='tryton',
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/__init__.py", line 65, in setup
    return setuptools.setup(**attrs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/setuptools/__init__.py", line 103, in setup
    return distutils.core.setup(**attrs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 185, in
setup
    return run_commands(dist)
           ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 201, in
run_commands
    dist.run_commands()
  File "C:/msys64/mingw64/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 969, in
run_commands
    self.run_command(cmd)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/setuptools/dist.py", line 963, in run_command
    super().run_command(command)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 988, in
run_command
    cmd_obj.run()
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/command/install_exe.py", line 45, i
n run
    self.run_command("build_exe")
  File "C:/msys64/mingw64/lib/python3.11/site-packages/setuptools/_distutils/cmd.py", line 318, in r
un_command
    self.distribution.run_command(command)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/setuptools/dist.py", line 963, in run_command
    super().run_command(command)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 988, in
run_command
    cmd_obj.run()
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/command/build_exe.py", line 260, in
 run
    freezer: Freezer = Freezer(
                       ^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/freezer.py", line 772, in __init__
    Freezer.__init__(self, *args, **kwargs)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/freezer.py", line 125, in __init__
    self.finder: ModuleFinder = self._get_module_finder()
                                ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/freezer.py", line 398, in _get_modu
le_finder
    finder.include_package(name)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 794, in include_pa
ckage
    module = self._import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 693, in _scan_code
    self._scan_code(
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 693, in _scan_code
    self._scan_code(
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 693, in _scan_code
    self._scan_code(
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 470, in _load_modu
le_code
    self._scan_code(module, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 693, in _scan_code
    self._scan_code(
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 655, in _scan_code
    imported_module = self._import_module(
                      ^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 268, in _import_mo
dule
    module = self._internal_import_module(name, deferred_imports)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 355, in _internal_
import_module
    module = self._load_module(
             ^^^^^^^^^^^^^^^^^^
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 422, in _load_modu
le
    self._load_module_code(module, loader, deferred_imports)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/finder.py", line 463, in _load_modu
le_code
    module.hook(self)
  File "C:/msys64/mingw64/lib/python3.11/site-packages/cx_Freeze/hooks/__init__.py", line 605, in lo
ad_subprocess
    module.exclude_names.update(exclude_names)
                                ^^^^^^^^^^^^^
UnboundLocalError: cannot access local variable 'exclude_names' where it is not associated with a va
lue
cedk commented 2 months ago

I hope it's the regression I fixed in #2357 and backported to 7.0 in msys. This version should be released soon. Still in the queue to be published: https://packages.msys2.org/queue

Please test it when it is published and let me know. If not, give me more details.

I tried with last version and #2363 but it still crashes. Here is a screenshot of the full traceback (sorry I could not copy it):

2024-04-25-232641_1920x1080_scrot

cedk commented 2 months ago

I created #2364 as simple example to reproduce the problem. It fails the same way as the built of tryton client.

cedk commented 2 months ago

I could track that the problem appears in version 6.15.12

cedk commented 2 months ago

I suspect it is linked to #2144

marcelotduarte commented 2 months ago

I'm working on tests for the msys2 version, so it avoids these errors. I ended up discovering other errors with this #2367. I tested your sample with this version and it worked. I'm waiting for the pytest-datafiles package to become available and then I'll send a new patch.

marcelotduarte commented 2 months ago

https://github.com/msys2/MINGW-packages/pull/20760 merged.

mrichez-saluc commented 2 months ago

Still the same error with latest mingw package 7.0.0-4 :(

gbtami commented 2 months ago

Same for us in https://github.com/pychess/pychess/pull/2119

marcelotduarte commented 2 months ago

As a workaround: put all required files in lib: include_files.append((dll_path, os.path.join("lib", dll))) and added before import gi:

import os
import sys

if hasattr(sys, "frozen"):
    frozen_dir = os.path.dirname(sys.executable)
    os.environ["PATH"] = (
        os.environ["PATH"] + os.pathsep + os.path.join(frozen_dir, "lib")
    )

remmina_teste-w11_192 168 122 244_20240428-214929

marcelotduarte commented 2 months ago

You can test the patch in the latest development build (7.1.0.dev9): pip install --force --no-cache --pre --extra-index-url https://marcelotduarte.github.io/packages/ cx_Freeze For conda-forge the command is: conda install -y --no-channel-priority -S -c https://marcelotduarte.github.io/packages/conda cx_Freeze For msys2, download the file at: https://marcelotduarte.github.io/packages/msys2/ and use it w/ pacman -U

marcelotduarte commented 1 month ago

@cedk @gbtami @mrichez-saluc Can you test the patch?

mrichez-saluc commented 1 month ago

Sorry for the delay. Yeah, it's finally working with your latest patch :-)

gbtami commented 1 month ago

Yes, it works for pychess as well. Thx for your hard work!