Skip to content

Commit

Permalink
First cut at bdist_pex
Browse files Browse the repository at this point in the history
  • Loading branch information
msabramo committed May 7, 2015
1 parent 3b55df7 commit 2ec2fb5
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 3 deletions.
81 changes: 81 additions & 0 deletions pex/bdist_pex.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Copyright 2014 Pants project contributors (see CONTRIBUTORS.md).
# Licensed under the Apache License, Version 2.0 (see LICENSE).

from __future__ import absolute_import, print_function

import os
from distutils.core import Command
from distutils import log as logger

import pkg_resources

safe_name = pkg_resources.safe_name
safe_version = pkg_resources.safe_version

from .bin.pex import main


def safer_name(name):
return safe_name(name).replace('-', '_')

def safer_version(version):
return safe_version(version).replace('-', '_')


class bdist_pex(Command):
description = 'create a pex distribution'
user_options = [
('console-script=', 'c',
"Set the entry point as to the script or console_script "
"as defined by a any of the distributions in the pex."),
('entry-point=', 'm',
"Set the entry point to module or module:symbol."),
('dist-dir=', 'd',
"directory to put final built distributions in"),
('index-url=', 'i',
"Additional cheeseshop indices to use to satisfy requirements."),
('python=', 'p',
"python interpreter to use"),
]

def initialize_options(self):
self.console_script = None
self.dist_dir = None
self.entry_point = None
self.index_url = None
self.python = None

def finalize_options(self):
need_options = ('dist_dir',)

self.set_undefined_options('bdist', *zip(need_options, need_options))

def run(self):
pexfile_path = self._get_pexfile_path()
logger.info('creating %s', pexfile_path)
args = ['.', '-o', pexfile_path]

if self.console_script:
args.append('--console-script=%s' % self.console_script)

if self.entry_point:
args.append('--entry-point=%s' % self.entry_point)

if self.index_url:
args.append('--index-url=%s' % self.index_url)

if self.python:
args.append('--python=%s' % self.python)

logger.debug('invoking pex with args: %r', args)
main(args)

def _get_pexfile_path(self):
return os.path.join(self.dist_dir, '%s.pex' % self.pex_dist_name)

@property
def pex_dist_name(self):
"""Return distribution full name with - replaced with _"""
return '-'.join((
safer_name(self.distribution.get_name()),
safer_version(self.distribution.get_version())))
8 changes: 5 additions & 3 deletions pex/bin/pex.py
Original file line number Diff line number Diff line change
Expand Up @@ -491,11 +491,13 @@ def build_pex(args, options, resolver_option_builder):
return pex_builder


def main():
def main(args=None):
parser, resolver_options_builder = configure_clp()

# split arguments early because optparse is dumb
args = sys.argv[1:]
if args is None:
# split arguments early because optparse is dumb
args = sys.argv[1:]

try:
separator = args.index('--')
args, cmdline = args[:separator], args[separator + 1:]
Expand Down
3 changes: 3 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,8 @@
'console_scripts': [
'pex = pex.bin.pex:main',
],
'distutils.commands': [
'bdist_pex = pex.bdist_pex:bdist_pex',
],
},
)

0 comments on commit 2ec2fb5

Please sign in to comment.