mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
#! /usr/bin/env python
|
|
|
|
sources = """
|
|
@SOURCES@"""
|
|
|
|
import os
|
|
import sys
|
|
import base64
|
|
import zlib
|
|
import tempfile
|
|
import shutil
|
|
|
|
|
|
def unpack(sources):
|
|
temp_dir = tempfile.mkdtemp('-scratchdir', 'unpacker-')
|
|
for package, content in sources.items():
|
|
filepath = package.split(".")
|
|
dirpath = os.sep.join(filepath[:-1])
|
|
packagedir = os.path.join(temp_dir, dirpath)
|
|
if not os.path.isdir(packagedir):
|
|
os.makedirs(packagedir)
|
|
mod = open(os.path.join(packagedir, "%s.py" % filepath[-1]), 'wb')
|
|
try:
|
|
mod.write(content.encode("ascii"))
|
|
finally:
|
|
mod.close()
|
|
return temp_dir
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if sys.version_info >= (3, 0):
|
|
exec("def do_exec(co, loc): exec(co, loc)\n")
|
|
import pickle
|
|
sources = sources.encode("ascii") # ensure bytes
|
|
sources = pickle.loads(zlib.decompress(base64.decodebytes(sources)))
|
|
else:
|
|
import cPickle as pickle
|
|
exec("def do_exec(co, loc): exec co in loc\n")
|
|
sources = pickle.loads(zlib.decompress(base64.decodestring(sources)))
|
|
|
|
try:
|
|
temp_dir = unpack(sources)
|
|
sys.path.insert(0, temp_dir)
|
|
|
|
entry = """@ENTRY@"""
|
|
do_exec(entry, locals())
|
|
finally:
|
|
shutil.rmtree(temp_dir)
|