Skip to content
Python PEX rules for Bazel
Python Shell
Branch: master
Clone or download

Latest commit

Evan Jones and benley pex_binary: Pass interpreter attribute as --python-shebang (#61)
The pex_binary interpreter attribute is documented as "Path to the
python interpreter the pex should to use in its shebang line."
However, it was not being passed when building the PEX, so it did not
take effect.

It is getting passed as PEX_PYTHON, which changes the interpreter used
for *that invocation* of a given pex. This may have been a recent
change: pantsbuild/pex#53

interpreter_test.py: Add a test that reads the files and verifies
    that the interpreter is set correctly.
Latest commit 0c5773d Jul 22, 2018

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples pex_binary: Pass interpreter attribute as --python-shebang (#61) Jul 22, 2018
pex pex_binary: Pass interpreter attribute as --python-shebang (#61) Jul 22, 2018
tests
third_party/example Possible fix for #65 (#66) May 19, 2018
.gitignore Initial import from heron.git Jun 18, 2016
.travis.yml Add Bazel 0.8 to CI suite (#56) Nov 30, 2017
BUILD Possible fix for #65 (#66) May 19, 2018
LICENSE.txt Add LICENSE and header where appropriate Apr 5, 2017
README.md Fix table formatting in README (#53) Nov 2, 2017
WORKSPACE Updates for Bazel 0.6 compatibility (#48) Sep 22, 2017
update_readme.sh Update README, add trivial update_readme script Jul 13, 2016

README.md

Python pex rules for Bazel

Overview

Rules

Macros


Overview

Build Status

Setup

Add something like this to your WORKSPACE file:

git_repository(
    name = "io_bazel_rules_pex",
    remote = "https://github.com/benley/bazel_rules_pex.git",
    tag = "0.3.0",
)
load("@io_bazel_rules_pex//pex:pex_rules.bzl", "pex_repositories")
pex_repositories()

In a BUILD file where you want to use these rules, or in your tools/build_rules/prelude_bazel file if you want them present repo-wide, add:

load(
    "@io_bazel_rules_pex//pex:pex_rules.bzl",
    "pex_binary",
    "pex_library",
    "pex_test",
    "pex_pytest",
)

Lastly, make sure that tools/build_rules/BUILD exists, even if it is empty, so that Bazel can find your prelude_bazel file.

pex_pytest

pex_pytest(name, srcs, deps, eggs, data, args, flaky, local, size, timeout, tags)

A variant of pex_test that uses py.test to run one or more sets of tests.

This produces two things:

  1. A pex_binary (<name>_runner) containing all your code and its dependencies, plus py.test, and the entrypoint set to the py.test runner.
  2. A small shell script to launch the <name>_runner executable with each of the srcs enumerated as commandline arguments. This is the actual test entrypoint for bazel.

Almost all of the attributes that can be used with pex_test work identically here, including those not specifically mentioned in this docstring. Exceptions are main and entrypoint, which cannot be used with this macro.

Attributes

name

Name; Required

A unique name for this rule.

srcs

Unknown; Required

List of files containing tests that should be run.

deps

List of strings; Optional

eggs

List of strings; Optional

data

List of strings; Optional

args

List of strings; Optional

flaky

Unknown; Optional

local

Unknown; Optional

size

Unknown; Optional

timeout

Unknown; Optional

tags

List of strings; Optional

## pex_repositories
pex_repositories()

Rules to be invoked from WORKSPACE for remote dependencies.

pex_binary

pex_binary(name, deps, data, srcs, disable_cache, eggs, entrypoint, interpreter, main, no_index, pex_use_wheels, pex_verbosity, repos, req_files, reqs, zip_safe)

Build a deployable pex executable.

Attributes

name

Name; Required

A unique name for this rule.

deps

List of labels; Optional; Default is []

Python module dependencies.

pex_library and py_library rules should work here.

data

List of labels; Optional; Default is []

Files to include as resources in the final pex binary.

Putting other rules here will cause the outputs of those rules to be embedded in this one. Files will be included as-is. Paths in the archive will be relative to the workspace root.

srcs

List of labels; Optional; Default is []

disable_cache

Boolean; Optional; Default is False

Disable caching in the pex tool entirely. Default: False

eggs

List of labels; Optional; Default is []

.egg and .whl files to include as python packages.

entrypoint

String; Optional; Default is ''

Name of a python module to use as the entrypoint.

e.g. your.project.main

If unspecified, the main attribute will be used. It is an error to specify both main and entrypoint.

interpreter

String; Optional; Default is ''

Path to the python interpreter the pex should to use in its shebang line.

main

Label; Optional

File to use as the entrypoint.

If unspecified, the first file from the srcs attribute will be used.

no_index

Boolean; Optional; Default is False

If True, don't use pypi to resolve dependencies for reqs and req_files; Default: False

pex_use_wheels

Boolean; Optional; Default is True

pex_verbosity

Integer; Optional; Default is 0

repos

List of labels; Optional; Default is []

Additional repository labels (filegroups of wheel/egg files) to look for requirements.

req_files

List of labels; Optional; Default is []

Add requirements from the given requirements files. Must be provided as labels.

This feature will reduce build determinism! It tells pex to resolve all the transitive python dependencies and fetch them from pypi.

It is recommended that you use eggs or specify no_index instead where possible.

reqs

List of strings; Optional; Default is []

External requirements to retrieve from pypi, in requirements.txt format.

This feature will reduce build determinism! It tells pex to resolve all the transitive python dependencies and fetch them from pypi.

It is recommended that you use eggs instead where possible.

zip_safe

Boolean; Optional; Default is True

## pex_library
pex_library(name, deps, data, srcs, disable_cache, eggs, no_index, repos, req_files, reqs)

Attributes

name

Name; Required

A unique name for this rule.

deps

List of labels; Optional; Default is []

Python module dependencies.

pex_library and py_library rules should work here.

data

List of labels; Optional; Default is []

Files to include as resources in the final pex binary.

Putting other rules here will cause the outputs of those rules to be embedded in this one. Files will be included as-is. Paths in the archive will be relative to the workspace root.

srcs

List of labels; Optional; Default is []

disable_cache

Boolean; Optional; Default is False

Disable caching in the pex tool entirely. Default: False

eggs

List of labels; Optional; Default is []

.egg and .whl files to include as python packages.

no_index

Boolean; Optional; Default is False

If True, don't use pypi to resolve dependencies for reqs and req_files; Default: False

repos

List of labels; Optional; Default is []

Additional repository labels (filegroups of wheel/egg files) to look for requirements.

req_files

List of labels; Optional; Default is []

Add requirements from the given requirements files. Must be provided as labels.

This feature will reduce build determinism! It tells pex to resolve all the transitive python dependencies and fetch them from pypi.

It is recommended that you use eggs or specify no_index instead where possible.

reqs

List of strings; Optional; Default is []

External requirements to retrieve from pypi, in requirements.txt format.

This feature will reduce build determinism! It tells pex to resolve all the transitive python dependencies and fetch them from pypi.

It is recommended that you use eggs instead where possible.

## pex_test
pex_test(name, deps, data, srcs, disable_cache, eggs, entrypoint, interpreter, main, no_index, pex_use_wheels, pex_verbosity, repos, req_files, reqs, zip_safe)

Attributes

name

Name; Required

A unique name for this rule.

deps

List of labels; Optional; Default is []

Python module dependencies.

pex_library and py_library rules should work here.

data

List of labels; Optional; Default is []

Files to include as resources in the final pex binary.

Putting other rules here will cause the outputs of those rules to be embedded in this one. Files will be included as-is. Paths in the archive will be relative to the workspace root.

srcs

List of labels; Optional; Default is []

disable_cache

Boolean; Optional; Default is False

Disable caching in the pex tool entirely. Default: False

eggs

List of labels; Optional; Default is []

.egg and .whl files to include as python packages.

entrypoint

String; Optional; Default is ''

Name of a python module to use as the entrypoint.

e.g. your.project.main

If unspecified, the main attribute will be used. It is an error to specify both main and entrypoint.

interpreter

String; Optional; Default is ''

Path to the python interpreter the pex should to use in its shebang line.

main

Label; Optional

File to use as the entrypoint.

If unspecified, the first file from the srcs attribute will be used.

no_index

Boolean; Optional; Default is False

If True, don't use pypi to resolve dependencies for reqs and req_files; Default: False

pex_use_wheels

Boolean; Optional; Default is True

pex_verbosity

Integer; Optional; Default is 0

repos

List of labels; Optional; Default is []

Additional repository labels (filegroups of wheel/egg files) to look for requirements.

req_files

List of labels; Optional; Default is []

Add requirements from the given requirements files. Must be provided as labels.

This feature will reduce build determinism! It tells pex to resolve all the transitive python dependencies and fetch them from pypi.

It is recommended that you use eggs or specify no_index instead where possible.

reqs

List of strings; Optional; Default is []

External requirements to retrieve from pypi, in requirements.txt format.

This feature will reduce build determinism! It tells pex to resolve all the transitive python dependencies and fetch them from pypi.

It is recommended that you use eggs instead where possible.

zip_safe

Boolean; Optional; Default is True

You can’t perform that action at this time.