""" 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)