不幸的是,原始文件的制表符和空格存在一些问题(只需查看中的
while缩进即可
expandlinks)。
我固定的压痕问题,改变
regsub.gsub与
re.sub和消除了
string进口,使用字符串类型的方法。
之后,脚本运行完美:
Pmw.py has been created. Before running freeze, also copy the following file(s): C:UsersjoaquinDesktopPmw.1.3.2srcPmwPmw_1_3libPmwBlt.py C:UsersjoaquinDesktopPmw.1.3.2srcPmwPmw_1_3libPmwColor.py
在这里,您有更正的脚本:
#!/usr/bin/env python# Helper script when freezing Pmw applications. It concatenates all# Pmw megawidget files into a single file, 'Pmw.py', in the current# directory. The script must be called with one argument, being the# path to the 'lib' directory of the required version of Pmw.# To freeze a Pmw application, you will also need to copy the# following files to the application directory before freezing:## PmwBlt.py PmwColor.pyimport osimport reimport sys# The order of these files is significant. Files which reference# other files must appear later. Files may be deleted if they are not# used.files = [ 'Dialog', 'TimeFuncs', 'Balloon', 'ButtonBox', 'EntryField', 'Group', 'LabeledWidget', 'MainMenuBar', 'MenuBar', 'MessageBar', 'MessageDialog', 'NoteBook', 'OptionMenu', 'PanedWidget', 'promptDialog', 'RadioSelect', 'ScrolledCanvas', 'ScrolledField', 'Scrolledframe', 'ScrolledListBox', 'ScrolledText', 'HistoryText', 'SelectionDialog', 'TextDialog', 'TimeCounter', 'aboutDialog', 'ComboBox', 'ComboBoxDialog', 'Counter', 'CounterDialog',]# Set this to 0 if you do not use any of the Pmw.Color functions:needColor = 1# Set this to 0 if you do not use any of the Pmw.Blt functions:needBlt = 1def expandlinks(path): if not os.path.isabs(path): path = os.path.join(os.getcwd(), path) while 1: if not os.path.islink(path): break dir = os.path.dirname(path) path = os.path.join(dir, os.readlink(path)) return pathdef mungeFile(file): # Read the file and modify it so that it can be bundled with the # other Pmw files. file = 'Pmw' + file + '.py' text = open(os.path.join(srcdir, file)).read() text = re.sub('import Pmw>', '', text) text = re.sub('INITOPT = Pmw.INITOPT', '', text) text = re.sub('<Pmw.', '', text) text = 'n' + ('#' * 70) + 'n' + '### File: ' + file + 'n' + text return text# Work out which version is being bundled.file = sys.argv[0]file = os.path.normpath(file)file = expandlinks(file)dir = os.path.dirname(file)dir = expandlinks(dir)dir = os.path.dirname(dir)dir = expandlinks(dir)dir = os.path.basename(dir)version = dir[4:].replace('_', '.')# Code to import the Color module.colorCode = """import PmwColorColor = PmwColordel PmwColor"""# Code to import the Blt module.bltCode = """import PmwBltBlt = PmwBltdel PmwBlt"""# Code used when not linking with PmwBlt.py.ignoreBltCode = """_bltimported = 1_bltbusyOK = 0"""# Code to define the functions normally supplied by the dynamic loader.extraCode = """### Loader functions:_VERSION = '%s'def setversion(version): if version != _VERSION: raise ValueError, 'Dynamic versioning not available'def setalphaversions(*alpha_versions): if alpha_versions != (): raise ValueError, 'Dynamic versioning not available'def version(alpha = 0): if alpha: return () else: return _VERSIondef installedversions(alpha = 0): if alpha: return () else: return (_VERSION,)"""if '-noblt' in sys.argv: sys.argv.remove('-noblt') needBlt = 0if '-nocolor' in sys.argv: sys.argv.remove('-nocolor') needColor = 0if len(sys.argv) != 2: print 'usage: bundlepmw.py [-noblt] [-nocolor] /path/to/Pmw/Pmw_X_X_X/lib' sys.exit()srcdir = sys.argv[1]if os.path.exists('Pmw.py'): print 'Pmw.py already exists. Remove it and try again.' sys.exit()outfile = open('Pmw.py', 'w')if needColor: outfile.write(colorCode)if needBlt: outfile.write(bltCode)outfile.write(extraCode % version)# Specially handle Pmwbase.py file:text = mungeFile('base')text = re.sub('import PmwLogicalFont', '', text)text = re.sub('PmwLogicalFont._font_initialise', '_font_initialise', text)outfile.write(text)if not needBlt: outfile.write(ignoreBltCode)files.append('LogicalFont')for file in files: text = mungeFile(file) outfile.write(text)print ''print ' Pmw.py has been created.'if needColor or needBlt: print ' Before running freeze, also copy the following file(s):' if needBlt: print ' ' + os.path.join(srcdir, 'PmwBlt.py') if needColor: print ' ' + os.path.join(srcdir, 'PmwColor.py')


