Cx_freeze excluding unwanted libs - python

I am trying to exluce a few libs that i do not need in my build but even when added to the list they are still shown in the build log.
this is my code for the build.
from cx_Freeze import setup, Executable
build_exe_options = {"excludes": ["tkinter", "PIL"], "include_files":
['bin'], "optimize": 2}
setup(
author="secret",
name="app",
options={"build_exe": build_exe_options},
version="1.0",
description="something",
executables=[Executable("app.py", base="Console")])
What am i missing?

Your code looks like it should work...have you checked if the setup.py is referred to correctly in your command line?
To exclude the libs you don't need, this is what I use:
import sys
from cx_Freeze import setup, Executable
import os
build_exe_options = {"packages": ["os",
'numpy'
],
"excludes": ["PyQt4",
"PyQt5",
'matplotlib',
],
"includes":["pandas",
],
"include_files": [r'C:\ProgramData\Anaconda3\DLLs\tcl86t.dll',
r'C:\ProgramData\Anaconda3\DLLs\tk86t.dll',],
"optimize": 2,
}
base = None
if sys.platform == "win32":
base = "Win32GUI"
name = "yourscript.py"
setup( name = name,
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable(name, base=base)])
This successfully excludes the big packages I don't use, so you could try modifying this.

Related

Unable to compile with cx_freeze and PySide2

I have a python program I'm trying to compile with cx_freeze. The GUI I'm using is PySide2.
I've tried including PySide2, here is excluding it, but I keep getting the same error. Below is my setup.py code
from cx_Freeze import setup, Executable
import sys
includefiles = ['README.md', 'debug.log','tcl86t.dll', 'tk86t.dll', 'field.jpg', 'inputClass.py', 'mainfile.qml', 'MyTabView.qml', 'PlayerSelection.qml', 'selectedPlayers.py', 'Settings.qml', 'SimOutput.qml', 'simulationOutput.py']
includes = ["idna.idnadata", "atexit"]
excludes = ["PySide2"]
import os
os.environ['TCL_LIBRARY'] = r'C:\Users\pimat\AppData\Local\Programs\Python\Python36\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Users\pimat\AppData\Local\Programs\Python\Python36\tcl\tk8.6'
setup(name = "Simulation",
version = "0.2",
description = "Optimization Simulator",
options = {'build_exe':{'includes':includes,'excludes':excludes,'include_files':includefiles}},
executables = [Executable("main.py")])
The program compiles fine, but when running the exe, I get the following error:
"ModuleNotFoundError: No module named 'PySide2'"
So the error was that I had installed cx_freeze with python 3.6, but all of my packages were in a python 3.7 folder. I simply copied and pasted into the 3.6 folder and changed the code a bit, and the exe works great.
from cx_Freeze import setup, Executable
import sys
# dependencies
build_exe_options = {
"packages": ["os", "sys", "re", "idna.idnadata", "atexit", "PySide2.QtCore", "PySide2.QtWidgets", "PySide2.QtUiTools", "PySide2.QtQuick", "PySide2.QtQml", "PySide2.QtGui", "shiboken2"],
"include_files": ['README.md', 'debug.log','tcl86t.dll', 'tk86t.dll', 'field.jpg', 'inputClass.py', 'mainfile.qml', 'MyTabView.qml', 'PlayerSelection.qml', 'selectedPlayers.py', 'Settings.qml', 'SimOutput.qml', 'simulationOutput.py',
],
"excludes": ["Tkinter", "Tkconstants", "tcl", ],
"build_exe": "build",
#"icon": "./example/Resources/Icons/monitor.ico"
}
executable = [
Executable("main.py",
base="Win32GUI",
targetName="Simulation.exe"
)
]
setup(name = "Simulation",
version = "0.2",
description = "Simulator",
options={"build_exe": build_exe_options},
executables=executable
)
T'was a dumb mistake, but I've made worse

cx_Freeze common lib folder between executables

I'm compiling a suite of python scripts into executables. I'm using cx_Freeze in order to do so.
The rather common problem is that the lib folder becomes very large. I have excluded modules as much as possible to reduce the size of this but it is still quite sizeable.
Since I am compiling multiple executables, is it possible to have a single shared lib folder that gets referenced by them all to reduce disk size?
An example setup.py is as follows:
import sys, os
from cx_Freeze import setup, Executable
base = None
if sys.platform == 'win32':
base = 'Win32GUI'
executables = [
Executable('MYSCRIPT.py', base=base)
]
additional_mods = ["numpy.core._methods", "numpy.lib.format"]
exclude_mods = ["babel", "scipy", "PyQt5", "tornado", "zmq", "sphinx", "sphinx_rtd_theme", "psutil", "notebook", "nbconvert", "lxml", "cryptography", "bottleneck", "matplotlib"]
build_exe_options = {"excludes": exclude_mods, "includes": additional_mods, "optimize": 1}
os.environ['TCL_LIBRARY'] = r'C:\ProgramData\Anaconda3\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\ProgramData\Anaconda3\tcl\tk8.6'
setup(name='MYSCRIPT',
version='0.1',
includes = ['os'],
options = {"build_exe": build_exe_options},
description='MYSCRIPT',
executables=executables
)
Yes it is possible. The trick is to use a single setup.py where the multiple scripts are added to the executables list.
Take for example the following pair of console-based scripts which both use numpy:
main1.py:
import numpy
print('Program 1, numpy version %s' % numpy.__version__)
input('Press ENTER to quit')
main2.py:
import numpy
print('Program 2, numpy version %s' % numpy.__version__)
input('Press ENTER to quit')
You can freeze this scripts at once with cx_Freeze using the following setup.py:
from cx_Freeze import setup, Executable
base = None
executables = [Executable('main1.py', base=base),
Executable('main2.py', base=base)]
additional_mods = ["numpy.core._methods", "numpy.lib.format"]
build_exe_options = {"includes": additional_mods}
setup(name='MYSCRIPTS',
version='0.1',
options={"build_exe": build_exe_options},
description='MYSCRIPTS',
executables=executables)
You get then two executables main1.exe and main2.exe sharing the same lib folder containing numpy.

Getting "ImportError: DLL load failed: The specified module could not be found" when using cx_Freeze even with tcl86t.dll and tk86t.dll added in

I am trying to convert a .py file to .exe using cx_Freeze 5.1.1., but an ImportError: DLL load failed pops up every time I try to run the file. Based on the suggested solutions here and here, I added tcl86t.dll and tk86t.dll to the list of included files. They appear in the build folder, but the error message keeps popping up.
Here is my setup.py:
import sys
import os
from cx_Freeze import setup, Executable
os.environ["TCL_LIBRARY"] = r"C:/Users/Name/AppData/Local/Programs/Python/Python36-32/tcl/tcl8.6"
os.environ["TK_LIBRARY"] = r"C:/Users/Name/AppData/Local/Programs/Python/Python36-32/tcl/tk8.6"
base = "Win32GUI" if sys.platform=="win32" else None
build_exe_options = {"packages": ["winsound", "random", "time", "tkinter", "math"],
"include_files": ['tcl86t.dll',
'tk86t.dll']}
setup(
name = "Game",
author = "Name",
description = "game description",
options = {"build_exe": build_exe_options},
executables = [Executable("game.py", base=base)]
)
I'm using Python 3.6.3 and Windows 10. Any help would be greatly appreciated!
In cx_Freeze version 5.1.1, the included modules are in a subdirectory lib of the build directory. The tcl86t.dll and tk86t.dll DLLs apparently need to be moved there as well.
You can do this with the following modification of your setup.py script:
build_exe_options = {"packages": ["winsound", "random", "time", "tkinter", "math"],
"include_files": [('tcl86t.dll', os.path.join('lib', 'tcl86t.dll')),
('tk86t.dll', os.path.join('lib', 'tk86t.dll'))]}

ModuleNotFoundError error from .pyd file

I had to to transform a module from .py to .pyd. I did it with Cython. I tested after the project, and everything worked fine. When I created a build with cx_Freeze, that .pyd module created problems. I can't understand why after building I get this ModuleNotFoundError.
File "tooth_comp.pyx", line 13, in int
src.graphics_dental_components.tooth_comp
ModuleNotFoundError: No module named 'graphics_utils.effects'
My setup script:
import sys
from cx_Freeze import setup, Executable
packages = []
excludes = []
include_files = ["assets", "views"]
build_exe_options = {"packages": packages, "excludes": excludes, "include_files": include_files}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "MyApp",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("app.py", base=base)])
The reason for the error message is because the application cannot find the extension.
Try adding graphics_utils.effects to the packages list then try recompiling.
If that does not work you could also try coping the module in the build folder manually.

How to use cx_freeze with pyautoit?

I want to create a cx_freeze executable from my windows application that use "pyautoit" module.
pip install -U pyautoit
This is my example code:
main.py
import autoit
autoit.run("notepad.exe")
autoit.win_wait_active("[CLASS:Notepad]", 3)
autoit.control_send("[CLASS:Notepad]", "Edit1", "hello world{!}")
autoit.win_close("[CLASS:Notepad]")
autoit.control_click("[Class:#32770]", "Button2")
setup.py
import sys
from cx_Freeze import setup, Executable
build_exe_options = {
"packages": ["autoit"],
"excludes": []
}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(
name = "AutoItSample",
version = "0.1",
description = "Automate Notepad Editor",
options = {"build_exe": build_exe_options},
executables = [Executable("main.py", base=base)],
)
And I created the build with this command inside my project folder.
python setup.py build
This module use a .dll file included inside the module folder.
autoit
lib
AutoItX3.dll
autoit.py
...
But cx_freeze doesn't include this .dll in the library.zip archive.
I tried to include the lib folder manually inside the library.zip archive.
But I've got the same error.
http://pix.toile-libre.org/upload/original/1428496271.png
What should I do to make it work?
Try using the zip_includes option in your setup.py file:
import sys
from cx_Freeze import setup, Executable
build_exe_options = {
"packages": ["autoit"],
"excludes": [],
"zip_includes": ['AutoITX3.dll']
}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(
name = "AutoItSample",
version = "0.1",
description = "Automate Notepad Editor",
options = {"build_exe": build_exe_options},
executables = [Executable("main.py", base=base)],
)

Categories