From: daid Date: Fri, 1 Jun 2012 09:29:21 +0000 (+0200) Subject: More fixes for a frozen build. Adds the code used by pypy into a zip which pypy uses... X-Git-Tag: 12.07~44^2~7 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=5769b22cd1dc16dd80abedb1813f8806ffa9f08b;p=cura.git More fixes for a frozen build. Adds the code used by pypy into a zip which pypy uses. This makes for a cleaner install. --- diff --git a/Cura/cura.py b/Cura/cura.py index 8e86f7bc..1b9fe2ff 100644 --- a/Cura/cura.py +++ b/Cura/cura.py @@ -8,7 +8,6 @@ Cura is a GPL tool chain to forge a gcode skein for a model. Based on Skeinforge The slicing code is the same as Skeinforge. But the UI has been revamped to be... sane. """ - from __future__ import absolute_import import __init__ diff --git a/Cura/cura_sf/fabmetheus_utilities/archive.py b/Cura/cura_sf/fabmetheus_utilities/archive.py index 8b6d93fa..c9e56557 100644 --- a/Cura/cura_sf/fabmetheus_utilities/archive.py +++ b/Cura/cura_sf/fabmetheus_utilities/archive.py @@ -10,6 +10,7 @@ import __init__ import os import sys import traceback +import zipfile __author__ = 'Enrique Perez (perez_enrique@yahoo.com)' @@ -101,10 +102,20 @@ def getFilePaths(fileInDirectory=''): def getFilePathsByDirectory(directoryName): 'Get the file paths in the directory of the file in directory.' absoluteDirectoryPath = os.path.abspath(directoryName) - directory = os.listdir(directoryName) filePaths = [] - for fileName in directory: - filePaths.append(os.path.join(absoluteDirectoryPath, fileName)) + if os.path.isdir(directoryName): + for fileName in os.listdir(directoryName): + filePaths.append(os.path.join(absoluteDirectoryPath, fileName)) + elif '.zip/' in directoryName: + zipfilename = directoryName[:directoryName.rfind('.zip/')+4] + subpath = directoryName[directoryName.rfind('.zip/')+5:] + + z = zipfile.ZipFile(zipfilename, 'r') + for name in z.namelist(): + if os.path.dirname(name) == subpath: + filePaths.append(os.path.join(zipfilename, name)) + z.close() + print directoryName, filePaths return filePaths def getFilePathsRecursively(fileInDirectory=''): @@ -156,14 +167,30 @@ def getFilesWithFileTypeWithoutWords(fileType, words = [], fileInDirectory=''): def getFileText(fileName, printWarning=True, readMode='r'): 'Get the entire text of a file.' + if '.zip/' in fileName: + zipfilename = fileName[:fileName.rfind('.zip/')+4] + subpath = fileName[fileName.rfind('.zip/')+5:] + + try: + z = zipfile.ZipFile(zipfilename, 'r') + f = z.open(subpath, 'r') + fileText = f.read() + f.close() + z.close() + return fileText + except KeyError: + if printWarning: + print('The file ' + fileName + ' does not exist.') + return '' try: - file = open(fileName, readMode) - fileText = file.read() - file.close() + f = open(fileName, readMode) + fileText = f.read() + f.close() return fileText except IOError: if printWarning: print('The file ' + fileName + ' does not exist.') + return '' def getFileTextInFileDirectory(fileInDirectory, fileName, readMode='r'): diff --git a/Cura/cura_sf/fabmetheus_utilities/fabmetheus_tools/fabmetheus_interpret.py b/Cura/cura_sf/fabmetheus_utilities/fabmetheus_tools/fabmetheus_interpret.py index 65de7cf7..d2914208 100644 --- a/Cura/cura_sf/fabmetheus_utilities/fabmetheus_tools/fabmetheus_interpret.py +++ b/Cura/cura_sf/fabmetheus_utilities/fabmetheus_tools/fabmetheus_interpret.py @@ -35,7 +35,7 @@ def getGNUTranslatorFilesUnmodified(): def getGNUTranslatorGcodeFileTypeTuples(): "Get the file type tuples from the translators in the import plugins folder plus gcode." - fileTypeTuples = getTranslatorFileTypeTuples() + fileTypeTuples = [] #getTranslatorFileTypeTuples() fileTypeTuples.append( ('Gcode text files', '*.gcode') ) fileTypeTuples.sort() return fileTypeTuples diff --git a/Cura/gui/opengl.py b/Cura/gui/opengl.py index e5204cff..9ed0573f 100644 --- a/Cura/gui/opengl.py +++ b/Cura/gui/opengl.py @@ -165,8 +165,8 @@ def ResetMatrixRotationAndScale(): matrix[2][2] = 1.0 if matrix[3][2] != 0.0: - matrix[3][0] /= -matrix[3][2] / 100 - matrix[3][1] /= -matrix[3][2] / 100 + matrix[3][0] = matrix[3][0] / (-matrix[3][2] / 100) + matrix[3][1] = matrix[3][1] / (-matrix[3][2] / 100) matrix[3][2] = -100 else: matrix[0][0] = scale2D diff --git a/Cura/setup.py b/Cura/setup.py index eb8c763e..e077f677 100644 --- a/Cura/setup.py +++ b/Cura/setup.py @@ -1,4 +1,4 @@ -import sys +import sys, os, zipfile try: import cx_Freeze except: @@ -10,19 +10,19 @@ if freezeVersion[0] < 4 or freezeVersion[0] == 4 and freezeVersion[1] < 2: print "ERROR: Your cx-Freeze version is too old to use with Cura." sys.exit(1) -sys.path.append('./cura_sf/') +sys.path.append(os.path.abspath('cura_sf')) # Dependencies are automatically detected, but it might need fine tuning. -build_exe_options = {"packages": [ +build_exe_options = { +"silent": True, +"packages": [ 'encodings.utf_8', "OpenGL", "OpenGL.arrays", "OpenGL.platform", "OpenGL.GLU", -], "excludes": ['Tkinter', 'tcl'], "optimize": 0, "include_files": [ +], "excludes": [ + 'Tkinter', 'tcl', 'cura_sf', 'fabmetheus_utilities', 'skeinforge_application', 'numpy', +], "include_files": [ ('images', 'images'), - ('cura.py', 'cura.py'), - ('__init__.py', '__init__.py'), - ('util', 'util'), - ('cura_sf', 'cura_sf') -]} +], "build_exe": 'freeze_build'} # GUI applications require a different base on Windows (the default is for a # console application). @@ -31,8 +31,31 @@ if sys.platform == "win32": base = "Win32GUI" cx_Freeze.setup( name = "Cura", - version = "RC5", - description = "Cura", - options = {"build_exe": build_exe_options}, - executables = [cx_Freeze.Executable("cura.py", base=base)]) + version = "RC5", + description = "Cura", + options = {"build_exe": build_exe_options}, + executables = [cx_Freeze.Executable("cura.py", base=base)]) + +m = cx_Freeze.ModuleFinder(excludes=["gui"]) +m.IncludeFile(os.path.abspath("cura.py")) +m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/profile_plugins/extrusion.py")) +m.IncludeFile(os.path.abspath("cura_sf/fabmetheus_utilities/fabmetheus_tools/interpret_plugins/stl.py")) +m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/export_plugins/static_plugins/gcode_small.py")) +for name in os.listdir("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins"): + if name.endswith('.py'): + m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/" + name)) +m.ReportMissingModules() +cwd = os.path.abspath(".") + +z = zipfile.ZipFile("freeze_build/cura_sf.zip", "w", zipfile.ZIP_DEFLATED) +for mod in m.modules: + if mod.file != None and mod.file.startswith(cwd): + if mod.file[len(cwd)+1:] == "cura.py": + z.write(mod.file[len(cwd)+1:], "__main__.py") + else: + z.write(mod.file[len(cwd)+1:]) +z.write('cura_sf/fabmetheus_utilities/templates/layer_template.svg') +z.write('cura_sf/fabmetheus_utilities/version.txt') +z.write('__init__.py') +z.close() diff --git a/Cura/util/sliceRun.py b/Cura/util/sliceRun.py index 22100367..483dbc5a 100644 --- a/Cura/util/sliceRun.py +++ b/Cura/util/sliceRun.py @@ -2,10 +2,11 @@ from __future__ import absolute_import import platform, os, subprocess, sys -cura_sf_path = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../cura_sf/")) -if cura_sf_path not in sys.path: - sys.path.append(cura_sf_path) -from skeinforge_application.skeinforge_utilities import skeinforge_craft +if not hasattr(sys, 'frozen'): + cura_sf_path = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../cura_sf/")) + if cura_sf_path not in sys.path: + sys.path.append(cura_sf_path) + from skeinforge_application.skeinforge_utilities import skeinforge_craft from util import profile @@ -77,13 +78,20 @@ def runSlice(fileNames): if platform.python_implementation() == "PyPy": skeinforge_craft.writeOutput(fileName) elif pypyExe == False: - print "************************************************" - print "* Failed to find pypy, so slicing with python! *" - print "************************************************" - skeinforge_craft.writeOutput(fileName) - print "************************************************" - print "* Failed to find pypy, so sliced with python! *" - print "************************************************" + if not hasattr(sys, 'frozen'): + print "************************************************" + print "* Failed to find pypy, so slicing with python! *" + print "************************************************" + skeinforge_craft.writeOutput(fileName) + print "************************************************" + print "* Failed to find pypy, so sliced with python! *" + print "************************************************" + else: + print "******************************************************************" + print "* Failed to find pypy, we need pypy to slice with a frozen build *" + print "* Place pypy in the same directory as Cura so Cura can find it. *" + print "******************************************************************" + sys.exit(1) else: subprocess.call(getSliceCommand(fileName)) @@ -149,7 +157,7 @@ def getSliceCommand(filename): #In case we have a frozen exe, then argv[0] points to the executable, but we want to give pypy a real script file. if hasattr(sys, 'frozen'): - mainScriptFile = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "cura.py")) + mainScriptFile = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../..", "cura_sf.zip")) else: mainScriptFile = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", os.path.split(sys.argv[0])[1])) cmd = [pypyExe, mainScriptFile, '-p', profile.getGlobalProfileString()]