Pants v2: The ergonomic build system

Welcome to the Pants v2 documentation hub!

Pants v2 is a fast, scalable, user-friendly build system for growing codebases. It's currently focused on Python, with support for other languages coming soon.

Here you'll find guides to help you get started with Pants v2, comprehensive documentation on how to configure, run and customize Pants v2, and information on how to get help from the Pants community.

Get Started

Global options

Options to control the overall behavior of Pants.

Config section: [GLOBAL]

Basic options

level

-l=<LogLevel>, --level=<LogLevel>
PANTS_LEVEL
one of: trace, debug, info, warn, error
default: info

Set the logging level.


colors

--[no-]colors
PANTS_COLORS
default: False

Whether Pants should use colors in output or not. This may also impact whether some tools Pants run use color.


spec_files

--spec-files="['<str>', '<str>', ...]"
PANTS_SPEC_FILES
default: []

Read additional specs (target addresses, files, and/or globs), one per line,from these files.


dynamic_ui

--[no-]dynamic-ui
PANTS_DYNAMIC_UI
default: False

Display a dynamically-updating console UI as Pants runs. This is true by default if Pants detects a TTY and there is no 'CI' environment variable indicating that Pants is running in a continuous integration environment.


tag

--tag="[[+-]tag1,tag2,..., [+-]tag1,tag2,..., ...]"
PANTS_TAG
default: []

Include only targets with these tags (optional '+' prefix) or without these tags ('-' prefix). See https://www.pantsbuild.org/v2.4/docs/advanced-target-selection.


exclude_target_regexp

--exclude-target-regexp="[<regexp>, <regexp>, ...]"
PANTS_EXCLUDE_TARGET_REGEXP
default: []

Exclude targets that match these regexes. This does not impact file arguments.


loop

--[no-]loop
PANTS_LOOP
default: False

Run goals continuously as file changes are detected. Alpha feature.


Advanced options

backend_packages

--backend-packages="['<str>', '<str>', ...]"
PANTS_BACKEND_PACKAGES
default: []

Register functionality from these backends.

The backend packages must be present on the PYTHONPATH, typically because they are in the Pants core dist, in a plugin dist, or available as sources in the repo.


plugins

--plugins="['<str>', '<str>', ...]"
PANTS_PLUGINS
default: []

Allow backends to be loaded from these plugins (usually released through PyPI). The default backends for each plugin will be loaded automatically. Other backends in a plugin can be loaded by listing them in `backend_packages` in the `[GLOBAL]` scope.


plugins_force_resolve

--[no-]plugins-force-resolve
PANTS_PLUGINS_FORCE_RESOLVE
default: False

Re-resolve plugins, even if previously resolved.


show_log_target

--[no-]show-log-target
PANTS_SHOW_LOG_TARGET
default: False

Display the target where a log message originates in that log message's output. This can be helpful when paired with --log-levels-by-target.


log_levels_by_target

--log-levels-by-target="{'key1': val1, 'key2': val2, ...}"
PANTS_LOG_LEVELS_BY_TARGET
default: {}

Set a more specific logging level for one or more logging targets. The names of logging targets are specified in log strings when the --show-log-target option is set. The logging levels are one of: "error", "warn", "info", "debug", "trace". All logging targets not specified here use the global log level set with --level. For example, you can set `--log-levels-by-target='{"workunit_store": "info", "pants.engine.rules": "warn"}'`.


log_show_rust_3rdparty

--[no-]log-show-rust-3rdparty
PANTS_LOG_SHOW_RUST_3RDPARTY
default: False

Whether to show/hide logging done by 3rdparty Rust crates used by the Pants engine.


ignore_pants_warnings

--ignore-pants-warnings="['<str>', '<str>', ...]"
PANTS_IGNORE_PANTS_WARNINGS
default: []

Regexps matching warning strings to ignore, e.g. ["DEPRECATED: the option `--my-opt` will be removed"]. The regex patterns will be matched from the start of the warning string, and are case-insensitive.


pants_version

--pants-version=<str>
PANTS_VERSION
default: 2.4.0rc2

Use this Pants version. Note that Pants only uses this to verify that you are using the requested version, as Pants cannot dynamically change the version it is using once the program is already running.

If you use the ./pants script from https://www.pantsbuild.org/v2.4/docs/installation, however, changing the value in your pants.toml will cause the new version to be installed and run automatically.

Run ./pants --version to check what is being used.


pants_bin_name

--pants-bin-name=<str>
PANTS_BIN_NAME
default: ./pants

The name of the script or binary used to invoke Pants. Useful when printing help messages.


pants_workdir

--pants-workdir=<dir>
PANTS_WORKDIR
default: /Users/eric/code/pants/.pants.d

Write intermediate logs and output files to this dir.


pants_physical_workdir_base

--pants-physical-workdir-base=<dir>
PANTS_PHYSICAL_WORKDIR_BASE
default: None

When set, a base directory in which to store `--pants-workdir` contents. If this option is a set, the workdir will be created as symlink into a per-workspace subdirectory.


pants_supportdir

--pants-supportdir=<dir>
PANTS_SUPPORTDIR
default: /Users/eric/code/pants/build-support

Unused. Will be deprecated in 2.2.0.


pants_distdir

--pants-distdir=<dir>
PANTS_DISTDIR
default: /Users/eric/code/pants/dist

Write end products, such as the results of `./pants package`, to this dir.


pants_subprocessdir

--pants-subprocessdir=<str>
PANTS_SUBPROCESSDIR
default: /Users/eric/code/pants/.pids

The directory to use for tracking subprocess metadata. This should live outside of the dir used by `pants_workdir` to allow for tracking subprocesses that outlive the workdir data.


pants_config_files

--pants-config-files="['<str>', '<str>', ...]"
PANTS_CONFIG_FILES
default:
[
  "/Users/eric/code/pants/pants.toml"
]

Paths to Pants config files. This may only be set through the environment variable `PANTS_CONFIG_FILES` and the command line argument `--pants-config-files`; it will be ignored if in a config file like `pants.toml`.


pantsrc

--[no-]pantsrc
PANTS_PANTSRC
default: True

Use pantsrc files located at the paths specified in the global option `pantsrc_files`.


pantsrc_files

--pantsrc-files="[<path>, <path>, ...]"
PANTS_PANTSRC_FILES
default:
[
  "/etc/pantsrc",
  "~/.pants.rc"
]

Override config with values from these files, using syntax matching that of `--pants-config-files`.


pythonpath

--pythonpath="['<str>', '<str>', ...]"
PANTS_PYTHONPATH
default: []

Add these directories to PYTHONPATH to search for plugins. This does not impact the PYTHONPATH used by Pants when running your Python code.


verify_config

--[no-]verify-config
PANTS_VERIFY_CONFIG
default: True

Verify that all config file values correspond to known options.


stats_record_option_scopes

--stats-record-option-scopes="['<str>', '<str>', ...]"
PANTS_STATS_RECORD_OPTION_SCOPES
default:
[
  "\*"
]

Option scopes to record in stats on run completion. Options may be selected by joining the scope and the option with a ^ character, i.e. to get option `pantsd` in the GLOBAL scope, you'd pass `GLOBAL^pantsd`. Add a '*' to the list to capture all known scopes.


pants_ignore

--pants-ignore="['<str>', '<str>', ...]"
PANTS_IGNORE
default:
[
  ".\*/",
  "/dist/"
]

Paths to ignore for all filesystem operations performed by pants (e.g. BUILD file scanning, glob matching, etc). Patterns use the gitignore syntax (https://git-scm.com/docs/gitignore). The `pants_distdir` and `pants_workdir` locations are automatically ignored. `pants_ignore` can be used in tandem with `pants_ignore_use_gitignore`; any rules specified here are applied after rules specified in a .gitignore file.


pants_ignore_use_gitignore

--[no-]pants-ignore-use-gitignore
PANTS_IGNORE_USE_GITIGNORE
default: True

Make use of a root .gitignore file when determining whether to ignore filesystem operations performed by Pants. If used together with `--pants-ignore`, any exclude/include patterns specified there apply after .gitignore rules.


logdir

-d=<dir>, --logdir=<dir>
PANTS_LOGDIR
default: None

Write logs to files under this directory.


pantsd

--[no-]pantsd
PANTS_PANTSD
default: True

Enables use of the Pants daemon (pantsd). pantsd can significantly improve runtime performance by lowering per-run startup cost, and by memoizing filesystem operations and rule execution.


concurrent

--[no-]concurrent
PANTS_CONCURRENT
default: False

Enable concurrent runs of Pants. Without this enabled, Pants will start up all concurrent invocations (e.g. in other terminals) without pantsd. Enabling this option requires parallel Pants invocations to block on the first


pantsd_timeout_when_multiple_invocations

--pantsd-timeout-when-multiple-invocations=<float>
PANTS_PANTSD_TIMEOUT_WHEN_MULTIPLE_INVOCATIONS
default: 60.0

The maximum amount of time to wait for the invocation to start until raising a timeout exception. Because pantsd currently does not support parallel runs, any prior running Pants command must be finished for the current one to start. To never timeout, use the value -1.


pantsd_max_memory_usage

--pantsd-max-memory-usage=<int>
PANTS_PANTSD_MAX_MEMORY_USAGE
default: 1073741824

The maximum memory usage of a pantsd process (in bytes). There is at most one pantsd process per workspace.


print_stacktrace

--[no-]print-stacktrace
PANTS_PRINT_STACKTRACE
default: False

Print the full exception stack trace for any errors.


native_engine_visualize_to

--native-engine-visualize-to=<dir_option>
PANTS_NATIVE_ENGINE_VISUALIZE_TO
default: None

A directory to write execution and rule graphs to as `dot` files. The contents of the directory will be overwritten if any filenames collide.


pantsd_pailgun_port

--pantsd-pailgun-port=<int>
PANTS_PANTSD_PAILGUN_PORT
default: 0

The port to bind the Pants nailgun server to. Defaults to a random port.


pantsd_invalidation_globs

--pantsd-invalidation-globs="['<str>', '<str>', ...]"
PANTS_PANTSD_INVALIDATION_GLOBS
default: []

Filesystem events matching any of these globs will trigger a daemon restart. Pants's own code, plugins, and `--pants-config-files` are inherently invalidated.


rule_threads_core

--rule-threads-core=<int>
PANTS_RULE_THREADS_CORE
default: 4

The number of threads to keep active and ready to execute `@rule` logic (see also: `--rule-threads-max`). Values less than 2 are not currently supported. This value is independent of the number of processes that may be spawned in parallel locally (controlled by `--process-execution-local-parallelism`).


rule_threads_max

--rule-threads-max=<int>
PANTS_RULE_THREADS_MAX
default: None

The maximum number of threads to use to execute `@rule` logic. Defaults to a small multiple of `--rule-threads-core`.


local_store_dir

--local-store-dir=<str>
PANTS_LOCAL_STORE_DIR
default: /Users/eric/.cache/pants/lmdb\_store

Directory to use for the local file store, which stores the results of subprocesses run by Pants. The path may be absolute or relative. If the directory is within the build root, be sure to include it in `--pants-ignore`.


local_store_shard_count

--local-store-shard-count=<int>
PANTS_LOCAL_STORE_SHARD_COUNT
default: 16

The number of LMDB shards created for the local store. This setting also impacts the maximum size of stored files: see `--local-store-files-max-size-bytes` for more information.

Because LMDB allows only one simultaneous writer per database, the store is split into multiple shards to allow for more concurrent writers. The faster your disks are, the fewer shards you are likely to need for performance.

NB: After changing this value, you will likely want to manually clear the --local-store-dir directory to clear the space used by old shard layouts.


local_store_processes_max_size_bytes

--local-store-processes-max-size-bytes=<int>
PANTS_LOCAL_STORE_PROCESSES_MAX_SIZE_BYTES
default: 16000000000

The maximum size in bytes of the local store containing process cache entries. Stored below `--local-store-dir`.


local_store_files_max_size_bytes

--local-store-files-max-size-bytes=<int>
PANTS_LOCAL_STORE_FILES_MAX_SIZE_BYTES
default: 256000000000

The maximum size in bytes of the local store containing files. Stored below `--local-store-dir`.

NB: This size value bounds the total size of all files, but (due to sharding of the store on disk) it also bounds the per-file size to (VALUE / --local-store-shard-count).

This value doesn't reflect space allocated on disk, or RAM allocated (it may be reflected in VIRT but not RSS). However, the default is lower than you might otherwise choose because macOS creates core dumps that include MMAP'd pages, and setting this too high might cause core dumps to use an unreasonable amount of disk if they are enabled.


local_store_directories_max_size_bytes

--local-store-directories-max-size-bytes=<int>
PANTS_LOCAL_STORE_DIRECTORIES_MAX_SIZE_BYTES
default: 16000000000

The maximum size in bytes of the local store containing directories. Stored below `--local-store-dir`.


named_caches_dir

--named-caches-dir=<str>
PANTS_NAMED_CACHES_DIR
default: /Users/eric/.cache/pants/named\_caches

Directory to use for named global caches for tools and processes with trusted, concurrency-safe caches. The path may be absolute or relative. If the directory is within the build root, be sure to include it in `--pants-ignore`.


local_execution_root_dir

--local-execution-root-dir=<str>
PANTS_LOCAL_EXECUTION_ROOT_DIR
default: /var/folders/hm/qjjq4w3n0fsb07kp5bxbn8rw0000gn/T

Directory to use for local process execution sandboxing. The path may be absolute or relative. If the directory is within the build root, be sure to include it in `--pants-ignore`.


process_execution_local_cache

--[no-]process-execution-local-cache
PANTS_PROCESS_EXECUTION_LOCAL_CACHE
default: True

Whether to cache process executions in a local cache persisted to disk at `--local-store-dir`.


process_execution_local_cleanup

--[no-]process-execution-local-cleanup
PANTS_PROCESS_EXECUTION_LOCAL_CLEANUP
default: True

If false, Pants will not clean up local directories used as chroots for running processes. Pants will log their location so that you can inspect the chroot, and run the `__run.sh` script to recreate the process using the same argv and environment variables used by Pants. This option is useful for debugging.


ca_certs_path

--ca-certs-path=<str>
PANTS_CA_CERTS_PATH
default: None

Path to a file containing PEM-format CA certificates used for verifying secure connections when downloading files required by a build.


process_execution_local_parallelism

--process-execution-local-parallelism=<int>
PANTS_PROCESS_EXECUTION_LOCAL_PARALLELISM
default: 8

Number of concurrent processes that may be executed locally.


process_execution_remote_parallelism

--process-execution-remote-parallelism=<int>
PANTS_PROCESS_EXECUTION_REMOTE_PARALLELISM
default: 128

Number of concurrent processes that may be executed remotely.


process_execution_cache_namespace

--process-execution-cache-namespace=<str>
PANTS_PROCESS_EXECUTION_CACHE_NAMESPACE
default: None

The cache namespace for process execution. Change this value to invalidate every artifact's execution, or to prevent process cache entries from being (re)used for different usecases or users.


remote_execution

--[no-]remote-execution
PANTS_REMOTE_EXECUTION
default: False

Enables remote workers for increased parallelism. (Alpha)

Alternatively, you can use --remote-cache-read and --remote-cache-write to still run everything locally, but to use a remote cache.


remote_cache_read

--[no-]remote-cache-read
PANTS_REMOTE_CACHE_READ
default: False

Whether to enable reading from a remote cache.

This cannot be used at the same time as --remote-execution.


remote_cache_write

--[no-]remote-cache-write
PANTS_REMOTE_CACHE_WRITE
default: False

Whether to enable writing results to a remote cache.

This cannot be used at the same time as --remote-execution.


remote_instance_name

--remote-instance-name=<str>
PANTS_REMOTE_INSTANCE_NAME
default: None

Name of the remote instance to use by remote caching and remote execution.

This is used by some remote servers for routing. Consult your remote server for whether this should be set.

You can also use --remote-auth-plugin to provide a plugin to dynamically set this value.


remote_ca_certs_path

--remote-ca-certs-path=<str>
PANTS_REMOTE_CA_CERTS_PATH
default: None

Path to a PEM file containing CA certificates used for verifying secure connections to --remote-execution-address and --remote-store-address.

If unspecified, Pants will attempt to auto-discover root CA certificates when TLS is enabled with remote execution and caching.


remote_oauth_bearer_token_path

--remote-oauth-bearer-token-path=<str>
PANTS_REMOTE_OAUTH_BEARER_TOKEN_PATH
default: None

Path to a file containing an oauth token to use for gGRPC connections to --remote-execution-address and --remote-store-address.

If specified, Pants will add a header in the format authorization: Bearer &lt;token&gt;. You can also manually add this header via --remote-execution-headers and --remote-store-headers, or use --remote-auth-plugin to provide a plugin to dynamically set the relevant headers. Otherwise, no authorization will be performed.


remote_auth_plugin

--remote-auth-plugin=<str>
PANTS_REMOTE_AUTH_PLUGIN
default: None

Path to a plugin to dynamically configure remote caching and execution options.

Format: path.to.module:my_func. Pants will import your module and run your function. Update the --pythonpath option to ensure your file is loadable.

The function should take the kwargs initial_store_headers: Dict[str, str], initial_execution_headers: Dict[str, str], and options: Options (from pants.option.options). It should return an instance of AuthPluginResult from pants.option.global_options.

Pants will replace the headers it would normally use with whatever your plugin returns; usually, you should include the initial_store_headers and initial_execution_headers in your result so that options like --remote-store-headers still work.

If you return instance_name, Pants will replace --remote-instance-name with this value.

If the returned auth state is AuthPluginState.UNAVAILABLE, Pants will disable remote caching and execution.


remote_store_address

--remote-store-address=<str>
PANTS_REMOTE_STORE_ADDRESS
default: None

The URI of a server used for the remote file store.

Format: scheme://host:port. The supported schemes are grpc and grpcs, i.e. gRPC with TLS enabled. If grpc is used, TLS will be disabled.


remote_store_headers

--remote-store-headers="{'key1': val1, 'key2': val2, ...}"
PANTS_REMOTE_STORE_HEADERS
default: {}

Headers to set on remote store requests.

Format: header=value. Pants may add additional headers.

See --remote-execution-headers as well.


remote_store_chunk_bytes

--remote-store-chunk-bytes=<int>
PANTS_REMOTE_STORE_CHUNK_BYTES
default: 1048576

Size in bytes of chunks transferred to/from the remote file store.


remote_store_chunk_upload_timeout_seconds

--remote-store-chunk-upload-timeout-seconds=<int>
PANTS_REMOTE_STORE_CHUNK_UPLOAD_TIMEOUT_SECONDS
default: 60

Timeout (in seconds) for uploads of individual chunks to the remote file store.


remote_store_rpc_retries

--remote-store-rpc-retries=<int>
PANTS_REMOTE_STORE_RPC_RETRIES
default: 2

Number of times to retry any RPC to the remote store before giving up.


remote_cache_warnings

--remote-cache-warnings=<RemoteCacheWarningsBehavior>
PANTS_REMOTE_CACHE_WARNINGS
one of: ignore, first_only, backoff
default: first\_only

Whether to log remote cache failures at the `warn` log level.

All errors not logged at the warn level will instead be logged at the debug level.


remote_cache_eager_fetch

--[no-]remote-cache-eager-fetch
PANTS_REMOTE_CACHE_EAGER_FETCH
default: True

Eagerly fetch relevant content from the remote store instead of lazily fetching.

This may result in worse performance, but reduce the frequency of errors encountered by reducing the surface area of when remote caching is used.


remote_execution_address

--remote-execution-address=<str>
PANTS_REMOTE_EXECUTION_ADDRESS
default: None

The URI of a server used as a remote execution scheduler.

Format: scheme://host:port. The supported schemes are grpc and grpcs, i.e. gRPC with TLS enabled. If grpc is used, TLS will be disabled.

You must also set --remote-store-address, which will often be the same value.


remote_execution_extra_platform_properties

--remote-execution-extra-platform-properties="['<str>', '<str>', ...]"
PANTS_REMOTE_EXECUTION_EXTRA_PLATFORM_PROPERTIES
default: []

Platform properties to set on remote execution requests. Format: property=value. Multiple values should be specified as multiple occurrences of this flag. Pants itself may add additional platform properties.


remote_execution_headers

--remote-execution-headers="{'key1': val1, 'key2': val2, ...}"
PANTS_REMOTE_EXECUTION_HEADERS
default: {}

Headers to set on remote execution requests. Format: header=value. Pants may add additional headers.

See --remote-store-headers as well.


remote_execution_overall_deadline_secs

--remote-execution-overall-deadline-secs=<int>
PANTS_REMOTE_EXECUTION_OVERALL_DEADLINE_SECS
default: 3600

Overall timeout in seconds for each remote execution request from time of submission


files_not_found_behavior

--files-not-found-behavior=<FilesNotFoundBehavior>
PANTS_FILES_NOT_FOUND_BEHAVIOR
one of: warn, error
default: warn

What to do when files and globs specified in BUILD files, such as in the `sources` field, cannot be found. This happens when the files do not exist on your machine or when they are ignored by the `--pants-ignore` option.


owners_not_found_behavior

--owners-not-found-behavior=<OwnersNotFoundBehavior>
PANTS_OWNERS_NOT_FOUND_BEHAVIOR
one of: ignore, warn, error
default: error

What to do when file arguments do not have any owning target. This happens when there are no targets whose `sources` fields include the file argument.


build_patterns

--build-patterns="['<str>', '<str>', ...]"
PANTS_BUILD_PATTERNS
default:
[
  "BUILD",
  "BUILD.\*"
]

The naming scheme for BUILD files, i.e. where you define targets. This only sets the naming scheme, not the directory paths to look for. To add ignorepatterns, use the option `--build-ignore`.


build_ignore

--build-ignore="['<str>', '<str>', ...]"
PANTS_BUILD_IGNORE
default: []

Paths to ignore when identifying BUILD files. This does not affect any other filesystem operations; use `--pants-ignore` for that instead. Patterns use the gitignore pattern syntax (https://git-scm.com/docs/gitignore).


build_file_prelude_globs

--build-file-prelude-globs="['<str>', '<str>', ...]"
PANTS_BUILD_FILE_PRELUDE_GLOBS
default: []

Python files to evaluate and whose symbols should be exposed to all BUILD files. See https://www.pantsbuild.org/v2.4/docs/macros.


subproject_roots

--subproject-roots="['<str>', '<str>', ...]"
PANTS_SUBPROJECT_ROOTS
default: []

Paths that correspond with build roots for any subproject that this project depends on.


loop_max

--loop-max=<int>
PANTS_LOOP_MAX
default: 4294967296

The maximum number of times to loop when `--loop` is specified.


streaming_workunits_report_interval

--streaming-workunits-report-interval=<float>
PANTS_STREAMING_WORKUNITS_REPORT_INTERVAL
default: 1.0

Interval in seconds between when streaming workunit event receivers will be polled.


Deprecated options

plugin_cache_dir

--plugin-cache-dir=<str>
PANTS_PLUGIN_CACHE_DIR
default: /Users/eric/.cache/pants/plugins

Deprecated, will be removed in version: 2.5.0.dev0.
This option now no-ops, the plugins cache is now housed in the named caches.

Cache resolved plugin requirements here.


process_execution_use_local_cache

--[no-]process-execution-use-local-cache
PANTS_PROCESS_EXECUTION_USE_LOCAL_CACHE
default: True

Deprecated, will be removed in version: 2.5.0.dev0.
Use the shorter `--process-execution-local-cache`, which behaves the same.

Whether to keep process executions in a local cache persisted to disk.


process_execution_cleanup_local_dirs

--[no-]process-execution-cleanup-local-dirs
PANTS_PROCESS_EXECUTION_CLEANUP_LOCAL_DIRS
default: True

Deprecated, will be removed in version: 2.5.0.dev0.
Use the shorter `--process-execution-local-cleanup`, which behaves the same.

Whether or not to cleanup directories used for local process execution (primarily useful for e.g. debugging).


process_execution_local_enable_nailgun

--[no-]process-execution-local-enable-nailgun
PANTS_PROCESS_EXECUTION_LOCAL_ENABLE_NAILGUN
default: False

Deprecated, will be removed in version: 2.5.0.dev0.
This option no-ops as Pants does not yet support the JVM.

Whether or not to use nailgun to run the requests that are marked as nailgunnable.


Updated about a month ago


Global options


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.