1
votes

I'm creating a GUI desktop program with Python using Tkinter and now trying to convert a python file into an executable with cx_Freeze but when I run

python setup.py build

I get an error saying

AttributeError: 'list' object has no attribute 'main_script'

Detail as below:

Traceback (most recent call last):

File "H:\OneDrive\Jobs\Dev\TMS\setup.py", line 17, in cx_Freeze.setup( File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\site-packages\cx_Freeze\dist.py", line 397, in setup distutils.core.setup(**attrs) File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\distutils\core.py", line 148, in setup dist.run_commands() File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\distutils\dist.py", line 966, in run_commands self.run_command(cmd) File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\distutils\dist.py", line 985, in run_command cmd_obj.run() File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\distutils\command\build.py", line 135, in run self.run_command(cmd_name) File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\distutils\cmd.py", line 313, in run_command self.distribution.run_command(command) File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\distutils\dist.py", line 985, in run_command cmd_obj.run() File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\site-packages\cx_Freeze\dist.py", line 265, in run freezer.Freeze() File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\site-packages\cx_Freeze\freezer.py", line 799, in Freeze self._FreezeExecutable(executable) File "C:\Users\lersa\AppData\Local\Programs\Python\Python39\lib\site-packages\cx_Freeze\freezer.py", line 238, in _FreezeExecutable finder.IncludeFile(exe.main_script, exe.main_module_name) AttributeError: 'list' object has no attribute 'main_script'

Is the issue in my setup file or the main file of my code?

import cx_Freeze
from cx_Freeze import *
import sys

base = None
if sys.platform == "win32":
base = "Win32GUI"
executables = [
    cx_Freeze.Executable(
        "iwms.py",
        copyright="Copyright (C) 2021",
        base=base,
        icon="imws.ico",
    ),
],

cx_Freeze.setup(
    name = "App",
    version = "0.1",
    description = "My application!",
    options = {"build_exe": build_exe_options},
    executables = executables
)
1

1 Answers

0
votes

IDK know why is this happeing but you should do this instead:

import cx_Freeze
from cx_Freeze import *
import sys

base = None
if sys.platform == "win32":
base = "Win32GUI"

cx_Freeze.setup(
    name = "App",
    version = "0.1",
    description = "My application!",
    options = {"build_exe": build_exe_options},
    executables = [
       cx_Freeze.Executable(
           "iwms.py",
           copyright="Copyright (C) 2021",
           base=base,
           icon="imws.ico",
      ),
   ])

Put Executable list directly in the setup function.