# Getting a REPL or Interactive Shell

`rules_python` provides a REPL to help with debugging and developing. The goal of
the REPL is to present an environment identical to what a {bzl:obj}`py_binary` creates
for your code.

## Usage

Start the REPL with the following command:
```console
$ bazel run @rules_python//python/bin:repl
Python 3.14.4 (main, Mar 17 2026, 21:02:09) [Clang 20.1.0 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

Settings like `//python/config_settings:python_version` will influence the exact
behaviour.
```console
$ bazel run @rules_python//python/bin:repl --@rules_python//python/config_settings:python_version=3.13
Python 3.13.2 (main, Mar 17 2025, 21:02:54) [Clang 20.1.0 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

See [//python/config_settings](api/rules_python/python/config_settings/index)
and [Environment Variables](environment-variables) for more settings.

## Importing Python targets

The `//python/bin:repl_dep` command line flag gives the REPL access to a target
that provides the {bzl:obj}`PyInfo` provider.

```console
$ bazel run @rules_python//python/bin:repl --@rules_python//python/bin:repl_dep=@rules_python//tools:wheelmaker
Python 3.14.4 (main, Mar 17 2026, 21:02:09) [Clang 20.1.0 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tools.wheelmaker
>>>
```

## Customizing the shell

By default, the `//python/bin:repl` target will invoke the shell from the `code`
module. It's possible to switch to another shell by writing a custom "stub" and
pointing the target at the necessary dependencies.

### IPython Example

For an IPython shell, create a file as follows.

```python
import IPython
IPython.start_ipython()
```

Assuming the file is called `ipython_stub.py` and the `pip.parse` hub's name is
`my_deps`, set this up in the .bazelrc file:
```
# Allow the REPL stub to import ipython. In this case, @my_deps is the hub name
# of the pip.parse() call.
build --@rules_python//python/bin:repl_stub_dep=@my_deps//ipython

# Point the REPL at the stub created above.
build --@rules_python//python/bin:repl_stub=//path/to:ipython_stub.py
```
