blob: d81d72f59072a496d3219e7c74332e8a3410ddc4 [file] [log] [blame] [view] [edit]
# Getting started
This document is a simplified guide to help you get started quickly. It provides
a simplified introduction to having a working Python program for both `bzlmod`
and the older way of using `WORKSPACE`.
It assumes you have a `requirements.txt` file with your PyPI dependencies.
For more detailed information about configuring `rules_python`, see:
* [Configuring the runtime](configuring-toolchains)
* [Configuring third-party dependencies (pip/PyPI)](./pypi/index)
* [API docs](api/index)
## Including dependencies
The first step to using `rules_python` is to add the dependency to
your `MODULE.bazel` file:
```starlark
# Update the version "0.0.0" to the release found here:
# https://github.com/bazel-contrib/rules_python/releases.
bazel_dep(name = "rules_python", version = "0.0.0")
pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
pip.parse(
hub_name = "pypi",
python_version = "3.11",
requirements_lock = "//:requirements.txt",
)
use_repo(pip, "pypi")
```
### Using a WORKSPACE file
Using `WORKSPACE` is deprecated but still supported, and it's a bit more involved than
using Bzlmod. Here is a simplified setup to download the prebuilt runtimes.
```starlark
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
# Update the snippet based on the latest release below
# https://github.com/bazel-contrib/rules_python/releases
http_archive(
name = "rules_python",
sha256 = "ca77768989a7f311186a29747e3e95c936a41dffac779aff6b443db22290d913",
strip_prefix = "rules_python-0.36.0",
url = "https://github.com/bazel-contrib/rules_python/releases/download/0.36.0/rules_python-0.36.0.tar.gz",
)
load("@rules_python//python:repositories.bzl", "py_repositories")
py_repositories()
load("@rules_python//python:repositories.bzl", "python_register_toolchains")
python_register_toolchains(
name = "python_3_11",
# Available versions are listed in @rules_python//python:versions.bzl.
# We recommend using the same version your team is already standardized on.
python_version = "3.11",
)
load("@rules_python//python:pip.bzl", "pip_parse")
pip_parse(
name = "pypi",
python_interpreter_target = "@python_3_11_host//:python",
requirements_lock = "//:requirements.txt",
)
```
## "Hello World"
Once you've imported the rule set using either Bzlmod or `WORKSPACE`, you can then
load the core rules in your `BUILD` files with the following:
```starlark
load("@rules_python//python:py_binary.bzl", "py_binary")
py_binary(
name = "main",
srcs = ["main.py"],
deps = [
"@pypi//foo",
"@pypi//bar",
]
)
```