65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
| """
 | |
| Installs cx_freeze from source, but first patching
 | |
| setup.py as described here:
 | |
| 
 | |
| http://stackoverflow.com/questions/25107697/compiling-cx-freeze-under-ubuntu
 | |
| """
 | |
| import glob
 | |
| import tarfile
 | |
| import os
 | |
| import sys
 | |
| import platform
 | |
| import py
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     if 'ubuntu' not in platform.version().lower():
 | |
| 
 | |
|         print('Not Ubuntu, installing using pip. (platform.version() is %r)' %
 | |
|               platform.version())
 | |
|         res = os.system('pip install cx_freeze')
 | |
|         if res != 0:
 | |
|             sys.exit(res)
 | |
|         sys.exit(0)
 | |
| 
 | |
|     rootdir = py.path.local.make_numbered_dir(prefix='cx_freeze')
 | |
| 
 | |
|     res = os.system('pip install --download %s --no-use-wheel '
 | |
|                     'cx_freeze' % rootdir)
 | |
|     if res != 0:
 | |
|         sys.exit(res)
 | |
| 
 | |
|     packages = glob.glob('%s/*.tar.gz' % rootdir)
 | |
|     assert len(packages) == 1
 | |
|     tar_filename = packages[0]
 | |
| 
 | |
|     tar_file = tarfile.open(tar_filename)
 | |
|     try:
 | |
|         tar_file.extractall(path=str(rootdir))
 | |
|     finally:
 | |
|         tar_file.close()
 | |
| 
 | |
|     basename = os.path.basename(tar_filename).replace('.tar.gz', '')
 | |
|     setup_py_filename = '%s/%s/setup.py' % (rootdir, basename)
 | |
|     with open(setup_py_filename) as f:
 | |
|         lines = f.readlines()
 | |
| 
 | |
|     line_to_patch = 'if not vars.get("Py_ENABLE_SHARED", 0):'
 | |
|     for index, line in enumerate(lines):
 | |
|         if line_to_patch in line:
 | |
|             indent = line[:line.index(line_to_patch)]
 | |
|             lines[index] = indent + 'if True:\n'
 | |
|             print('Patched line %d' % (index + 1))
 | |
|             break
 | |
|     else:
 | |
|         sys.exit('Could not find line in setup.py to patch!')
 | |
| 
 | |
|     with open(setup_py_filename, 'w') as f:
 | |
|         f.writelines(lines)
 | |
| 
 | |
|     os.chdir('%s/%s' % (rootdir, basename))
 | |
|     res = os.system('python setup.py install')
 | |
|     if res != 0:
 | |
|         sys.exit(res)
 | |
| 
 | |
|     sys.exit(0)
 |