Package pyplusplus :: Package gui :: Module freeze

Source Code for Module pyplusplus.gui.freeze

 1  #! /usr/bin/python 
 2  # Copyright 2004-2008 Roman Yakovenko. 
 3  # Distributed under the Boost Software License, Version 1.0. (See 
 4  # accompanying file LICENSE_1_0.txt or copy at 
 5  # http://www.boost.org/LICENSE_1_0.txt) 
 6   
 7   
 8  """this module contains "freeze" functionality. 
 9   
10  It allows to create and distribute Py++ GUI as executable, that could be  
11  run without installing Python, pygccxml and Py++. 
12  """ 
13   
14  import os 
15  import sys 
16  import shutil 
17   
18 -def freeze_gui(source_dir, packages_dir, freeze_executable, target_dir):
19 target_name = 'demo' 20 target_dir = os.path.join( target_dir, target_name, sys.platform ) 21 if not os.path.exists( target_dir ): 22 os.makedirs( target_dir ) 23 if 'win32' == sys.platform: 24 target_name = target_name + '.exe' 25 26 cmd = [ freeze_executable ] 27 cmd.append( '--install-dir=%s' % target_dir ) 28 cmd.append( '--target-name=%s' % target_name ) 29 cmd.append( '--include-path=%s' % packages_dir ) 30 cmd.append( os.path.join( source_dir, 'ui.py' ) ) 31 cmd = ' '.join( cmd ) 32 33 input, output = os.popen4( cmd ) 34 input.close() 35 reports = [] 36 while True: 37 data = output.readline() 38 reports.append( data ) 39 if not data: 40 break 41 exit_status = output.close() 42 msg = ''.join(reports) 43 if exit_status: 44 raise RuntimeError('unable to create executable. error: %s' % msg ) 45 46 if sys.platform == 'win32': 47 dlls = os.path.join( os.path.split( sys.executable )[0], 'dlls' ) 48 files_to_copy = [ 'tk84.dll', 'tcl84.dll' ] 49 for f in files_to_copy: 50 shutil.copyfile( os.path.join( dlls, f ) 51 , os.path.join( target_dir, f ) ) 52