cx_freeze Won't create Metadata? - python-3.x

When I look at the properties window after building my program, the place where it should give me the version number and description is blank. This is my code
import sys
from cx_Freeze import setup, Executable
exe = Executable(
script = "ROT13.py",
initScript = None,
base = None,
targetName = "ROT13.exe",
copyDependentFiles = True,
compress = True,
appendScriptToExe = True,
appendScriptToLibrary = True,
icon = "blah.png",
)
setup(
name = "ROT13 Translator",
version = "0.1",
description = "A ROT13 Translator",
executables = [Executable("ROT13.py", base = "Console")]
)
Why does this not work?

Installing pywin32 (pip install pywin32) solved the issue for me.

Related

Packaging Python file with cx_Freeze

I am trying to package my Python code into an exe file but after following all the instructions on the link below, I managed to build the an exe file but when I try to run it, nothing happens.
https://cx-freeze.readthedocs.io/en/latest/distutils.html
My setup.py file is
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os","tkinter", "pandas" , "openpyxl", "datetime", "time"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "login",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("login.py", base=base)])
My login file runs without any error on Anaconda.
Can someone comment what may cause the problem?

Adding "matplotlib" to packages in cx_Freeze doesn't work

I am programming on Win 7 in Spyder/Anaconda. And I am having trouble converting my py into an exe. For background, my program .py has a few csv files it takes data from, asks the user for 4 integers, and generates a plot in matplotlib. It imports the packages below.
I was able to execute something like this (How can I convert a .py to .exe for Python?) but my situation isn't working when I start to use my code.
If I include "matplotlib" into the packages list, I get "KeyError: 'TCL_Library". What is this error and how do I fix it? Adding "os" works for reference.
In my program py, I use: import os, from os import listdir, import pylab, import matplotlib.pyplot as plt, import numpy as np, import matplotlib, import random. Do I leave these in my program py or move them to setup and how do I include the "from xxx" items in the packages array?
import os
from cx_Freeze import setup, Executable
base = None
executables = [Executable("try1.py", base=base)]
cwd = os.getcwd()
f_3_to_3=cwd+'\\' + '3_to_3.csv'
packages = ["idna", "matplotlib"]
options = {
'build_exe': {
"include_files": (f_3_to_3),
'packages':packages,
},
}
setup(
name = "FirstBuild",
options = options,
version = "0",
description = 'This is cool',
executables = executables
)
Using this for my setup file worked. Note, I had to fix directory for tk and tcl along with reinstalling them
import os
from cx_Freeze import setup, Executable
import sys
base = None
os.environ['TCL_LIBRARY'] = "C:\\ProgramData\\Anaconda3\\Library\\lib\\tcl8.6"
os.environ['TK_LIBRARY'] = "C:\\ProgramData\\Anaconda3\\Library\\lib\\tk8.6"
executables = [Executable("MyPyFile.py", base=base)]
packages = ["idna", "os", "numpy", "numpy.core._methods", "matplotlib", "random"]
options = {
'build_exe': {
"includes": ["numpy.core._methods", "numpy", "tkinter"],
"include_files": [r'C:\ProgramData\Anaconda3\Library\plugins\platforms'],
'packages':packages,
},
}
setup(
name = "FirstBuild",
options = options,
version = "0",
description = 'This is cool',
executables = executables
)

cx freeze set custom .exe icon

I am converting a .py file to a .exe file using cx_freeze. My current setup file is working but I can not seem to change it so that my .exe file has the custom icon I have made. I have tried a few different ways and none of them seem to be working. Any advice would be very helpful. Thank you for your time.
Attempt one
import sys
from cx_Freeze import setup, Executable
include_files = ['autorun.inf']
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(name = "Calculator",
version = "0.1",
description = "Simple Calculator",
options = {'build_exe':{'include_files':include_files,
'icon':'icon.ico'}},
executables=[Executable("main.py", base = base)])
Attempt Two
import sys
from cx_Freeze import setup, Executable
include_files = ['autorun.inf']
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(name = "Calculator",
version = "0.1",
description = "Simple Calculator",
options = {'build_exe':{'include_files':include_files}},
executables=[Executable("main.py", base = base, icon = 'icon.ico')])
This method should work:
import sys
from cx_Freeze import setup, Executable
include_files = ['autorun.inf']
base = None
if sys.platform == "win32":
base = "Win32GUI"
exe = Executable(script='main.py', base = base, icon='icon.ico')
setup(name = "Calculator",
version = "0.1",
description = "Simple Calculator",
options = {'build_exe':{'include_files':include_files}},
executables = [exe])

cx_freeze gives input and file errors

I've seen similar problems on different forums, but none applies to this.
I have two files, one 'main.py' and the main program 'xlsKonverter.py' which I want to use cx_freeze to compile to an .exe file. When building the .exe I get this error message:
pywintypes.error: (110, 'EndUpdateResource', 'The system cannot open the device or file specified.')
And when trying to run the (somewhat finished) build, this Exception pops up:
I've tested all of my code, so the error is not there. It must be somewhere within the setup file. Am I wrong? And what would be a good fix?
'setup.py'
This is my cx_freeze setup
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
packages = ['xlrd', 'glob', 'sys']
includes = ['xlsKonverter']
includefiles = []
eggsacutibull = Executable(
script = "main.py",
base = 'Console',
initScript = None,
targetName = "main.py",
compress = True,
copyDependentFiles = True,
appendScriptToExe = False,
appendScriptToLibrary = False,
icon = None
)
setup( name = "Table Converter",
version = "0.3",
author = "Jørgen Sirhaug",
description = "Makes a .csv file from designated Wire List.",
options = {"build_exe": build_exe_options},
executables = [eggsacutibull]
)
'main.py'
, my main function
import xlsKonverter as xk
import os.path
import sys
def main():
fileList = xk.getAllFileURLsInDirectory("C:\\Users\\Jørgen\\Dropbox\\Aker\\Wire Lists\\")
if len(fileList) < 1:
print("ERROR! No files in directory!\nDoes the specified folder excist?")
else:
print('')
for i in range(len(fileList)):
try:
sheet = xk.getWorksheet(fileList[i])
tagCols = xk.automaticFirstRow(sheet)
pairedList = xk.pairCells(sheet, tagCols)
csvString = xk.makecsv(pairedList)#, tagCols)
xk.writeToFile(csvString, i)
except:
print("ERROR!\n" + fileList[i] + '\nThis file does not excist!')
main()
and the imports from 'xlsKonverter.py'
import xlrd
import glob
import sys
Try putting an encoding declaration in your main.py file. That's a comment that looks like this:
# encoding: cp1252
You might have to change the last bit depending on how you're saving the file. If it's created on Windows, cp1252 is normal for Western Europe. On Linux and Mac, utf8 is more common.

How does cxFreeze include internal project modules?

Update:
I suspect this is an error in cxFreeze as I understand this should
go automatically.
end update
Update:
I missed an error given by cxFreeze:
Missing modules:
? Test.MyClass imported from main__main__
end update
I'm not sure what the proper term is for modules within project unlike sys or PyQt, so I'm going with internal project modules.
I have some example code below where I recieve the error "ImportError: cannot import name MyClass." and I would love to know how to get cxFreeze to compile that 'Test.py' module.
Here's my main code:
Main.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
#from guiObjects.MainWindow import MainWindow
from Test import MyClass
if __name__ == "__main__":
# Initializing the main window
app = QApplication(sys.argv)
widget = QMainWindow()
#mainWindow = MainWindow(widget)
test = MyClass()
widget.show()
sys.exit(app.exec_())
Test.py
class MyClass(object):
def __init__(self):
pass
__init.py__
'''empty'''
Setup.py
import sys
from cx_Freeze import setup, Executable
path_platforms = ( "C:\Python33\Lib\site-packages\PyQt5\plugins\platforms\qwindows.dll", "platforms\qwindows.dll" )
includes = ["re","sip","atexit","PyQt5.QtCore","PyQt5.QtGui"]
includefiles = [path_platforms]
excludes = [
'_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
'Tkconstants', 'Tkinter'
]
packages = ["os"]
path = []
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
"includes": includes,
"include_files": includefiles,
"excludes": excludes,
"packages": packages,
"path": path
}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
exe = None
if sys.platform == "win32":
exe = Executable(
script="../Main.py",
initScript = None,
base="Win32GUI",
targetDir = r"dist",
targetName="Main.exe",
compress = True,
copyDependentFiles = True,
appendScriptToExe = False,
appendScriptToLibrary = False,
icon = None
)
setup(
name = "Main",
version = "0.1",
author = 'me',
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [exe]
)
This problem happens when you run setup.py in a subfolder of where Main.py is located.
I now placed my setup.py in the same folder as Main.py. and changed my .bat file to python ../setup.py build install.
This seems to be a bug in cx_Freeze as it works fine for Python 2.7, but not Python 3.3.
Your test.py is wrong, you can't leave functions empty, try
class MyClass(object):
def __init__(self):
pass
and in setup.py mabye add "Test" into "includes"
includes = ["re","sip","atexit","PyQt5.QtCore","PyQt5.QtGui", "Test"]

Resources