Last active
November 30, 2017 10:10
-
-
Save dlamotte/2622f9aff4471130f493 to your computer and use it in GitHub Desktop.
Using pex to build a single python executable (minimal requirements)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python2.7 | |
from pex.pex_builder import PEXBuilder | |
from pex.resolvable import resolvables_from_iterable | |
from pex.resolver import CachingResolver | |
from pex.resolver_options import ResolverOptionsBuilder | |
import argparse | |
import os | |
import shutil | |
import sys | |
import tempfile | |
def main(): | |
args = parse() | |
tmpdir = tempfile.mkdtemp() | |
try: | |
pex = PEXBuilder(path=tmpdir) | |
if args.requirement: | |
resolver = CachingResolver('.pex-cache', None) | |
resolveds = resolver.resolve(resolvables_from_iterable( | |
args.requirement, | |
ResolverOptionsBuilder() | |
)) | |
for dist in resolveds: | |
pex.add_distribution(dist) | |
pex.add_requirement(dist.as_requirement()) | |
for input in args.input: | |
pex.add_source( | |
input, | |
os.path.join(pex.BOOTSTRAP_DIR, input) | |
) | |
pex.set_entry_point(args.entrypoint) | |
if args.shebang: | |
pex.set_shebang(args.shebang) | |
pex.build(args.output) | |
finally: | |
shutil.rmtree(tmpdir, True) | |
return 0 | |
def parse(): | |
parser = argparse.ArgumentParser() | |
parser.add_argument('output', | |
help='the destination of the output pex' | |
) | |
parser.add_argument('entrypoint', | |
help='module[:symbol] to use as entrypoint', | |
) | |
parser.add_argument('input', | |
help='a list of python files to package in', | |
metavar='input.py', | |
nargs='+', | |
) | |
parser.add_argument('--shebang', | |
help='set shebang for the output pex' | |
) | |
parser.add_argument('--requirement', | |
action='append', | |
help='add requirements to this pex' | |
) | |
return parser.parse_args() | |
if __name__ == '__main__': | |
sys.exit(main()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pex==1.1.0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment