The scie-pants binary is the next-generation ./pants script.
It's currently in production use as the recommended way to install Pants and is suitable for trying out in any existing Pants-using project. We welcome reports of successes, failures and where things work but could be better.
See the official installation recommendations here for use as your pants launcher:
https://www.pantsbuild.org/docs/installation
The binaries are released via GitHub Releases for both Linux and macOS and both aarch64 and x86_64 chip architectures.
If you'd like to build your own version, see the contribution guide. There are build instructions there.
You can run scie-pants anywhere you'd use ./pants and other places besides. It should work just
like your existing ./pants script but with ~33% less latency launching Pants.
Beyond support for all known existing ./pants script features, the scie-pants executable
provides the following:
-
A hermetic Python interpreter appropriate for the current active Pants version:
You no longer need to have Python of the right version, or even any Python at all, installed on your system to use Pants. If you use
scie-pantsin a repo with old Pants (< 2.5.0), it will fetch a CPython 3.8 interpreter to use and a CPython 3.9 interpreter otherwise. These interpreters are self-contained from the Python Build Standalone project. -
Support for
.envfiles:The first
.envfile found in the current directory or any of its parent directories is loaded and exported into Pants (and scie-pants) environment. -
The ability to run Pants in a subdirectory of your project:
This is of limited utility since Pants internals don't support this well at the moment, but as soon as they do,
scie-pantswill allow you to work in the style you prefer. -
Built-in ability to set up a new Pants project:
If you run
scie-pantsin a directory where Pants is not already set up, it will prompt you, and you can let it set up the latest Pants stable version for your project. -
Built-in
pants_from_sourcessupport. You can either executescie-pantswithPANTS_SOURCEset to the path of a local clone of the Pants repo or else copy, link or symlink yourscie-pantsexecutable topants_from_sourcesand execute that. In this casePANTS_SOURCEwill default to../pantsjust as was the case in the bespoke./pants_from_sourcesscripts. -
Partial support for firewalls
Currently, you can re-direct the URLs used to fetch:
- Python Build Standalone CPython distributions used to bootstrap Pants.
- Pants PEX release assets which contain Pants as a single-file application.
This is done by exporting a PANTS_BOOTSTRAP_URLS environment variable
specifying the path to a JSON file containing a mapping of file names to URLS to fetch them from
under a top-level "ptex" key. For example:
{
"ptex": {
"cpython-3.8.16+20230507-x86_64-unknown-linux-gnu-install_only.tar.gz": "https://example.com/cpython-3.8.16%2B20230507-x86_64-unknown-linux-gnu-install_only.tar.gz",
"cpython-3.8.16+20230507-aarch64-apple-darwin-install_only.tar.gz": "https://example.com/cpython-3.8.16%2B20230507-aarch64-apple-darwin-install_only.tar.gz",
"cpython-3.9.16+20230507-x86_64-unknown-linux-gnu-install_only.tar.gz": "https://example.com/cpython-3.9.16%2B20230507-x86_64-unknown-linux-gnu-install_only.tar.gz",
"cpython-3.9.16+20230507-aarch64-apple-darwin-install_only.tar.gz": "https://example.com/cpython-3.9.16%2B20230507-aarch64-apple-darwin-install_only.tar.gz",
"pants.2.18.0-cp39-linux_x86_64.pex": "https://example.com/pants.2.18.0-cp39-linux_x86_64.pex",
...
}
}For keys that are "embedded" into scie-pants itself (such as Python Build Standalone), you can run:
$ SCIE=inspect scie-pants | jq .ptex
You'll need to run this once for each platform you use scie-pants on to gather all mappings
you'll need; e.g.: once for Linux x86_64 and once for Mac ARM.
The embedded artifact references also contain expected hashes of the downloaded content. Your
re-directed URLs must provide the same content as the canonical URLs; if the hashes of downloaded
files do not match those recorded in scie-pants, install will fail fast and let you know about
the hash mismatch.
For other keys that aren't embedded, and are generated on-the-fly (such as the Pants PEX), there
is no single source of truth that can be easily scraped out. For the Pants PEX, the key is the versioned
PEX name (E.g. pants.<version>-<python>-<plat>_<machine>.pex). These can be found on the relevant
GitHub Release page's Assets (e.g. https://github.com/pantsbuild/pants/releases/tag/release_2.18.0a0).
(Note that for 2.18.x, PEX exist versioned and unversioned. scie-pants only uses the versioned
name as the key).
The scie-pants binary will re-install versions of Pants you have already installed. The underlying
scie technology uses an nce cache
directory that is different from the ~/.cache/pants/setup directory used by the ./pants script.
This is a one-time event per Pants version.
If you run into an issue with scie-pants you might 1st try upgrading. You can do this with:
SCIE_BOOT=update scie-pants
That will update to the latest available stable release if there is a newer one and tell you if
there is not. You can also supply a scie-pants version as the sole argument to downgrade or switch
to a specific version.
When the Python virtual environment (venv) for Pants is created, any logged output during that
process is saved in a pants-install.log file in the venv root. The path to the venv root is logged
during bootstrapping on a line with this pattern:
New virtual environment successfully created at /.../nce/<hash value>/bindings/venvs/<pants version>
You can report an issue directly at https://github.com/pantsbuild/scie-pants/issues. Please include
the scie-pants version you're using. You can get this by running:
PANTS_BOOTSTRAP_VERSION=report scie-pants
You might want to check the existing issues first though. There are some known features and bugs on the roadmap you may have run into and if there is an existing issue, you can chime in on your support for it or your particular take on it.
There is a contribution guide and more developer docs are coming soon. Any help fixing bugs or improving UX is very welcome.