# Chromium Python Style Guide

_For other languages, please see the
[Chromium style guides](https://chromium.googlesource.com/chromium/src/+/main/styleguide/styleguide.md)._

The minimum supported Python version is 3.9, we recommend using Python 3.11 (as
in, that's what the bots use, so don't assume or require anything older *or*
newer), but most newer versions of Python3 will work fine for most things. There
is an appropriate version of Python3 in `$depot_tools/python-bin`, if you don't
have one already.

We (often) use a tool called [vpython] to manage Python packages; vpython is a
wrapper around virtualenv. However, it is not safe to use vpython regardless of
context, as it can have performance issues. All tests are run under vpython, so
it is safe there, and vpython is the default for running scripts during
PRESUBMIT checks (input_api.python3_executable points to vpython3 and is used in
GetPythonUnitTests), but you should not use vpython during gclient runhooks, or
during the build unless a [//build/OWNER](../../build/OWNERS) has told you that
it is okay to do so.

Also, there is some performance overhead to using vpython, so prefer not to use
vpython unless you need it (to pick up packages not available in the source
tree).

"shebang lines" (the first line of many unix scripts, like `#!/bin/sh`) aren't
as useful as you might think in Chromium, because most of our python invocations
come from other tools like Ninja or the swarming infrastructure, and they also
don't work on Windows. So, don't expect them to help you. That said, a python 3
shebang is one way to indicate to the presubmit system that test scripts should
be run under Python 3 rather than Python 2.

However, if your script is executable, you should still use one, and for Python
you should use `#!/usr/bin/env python3` or `#!/usr/bin/env vpython3` in order to
pick up the right version of Python from your $PATH rather than assuming you
want the version in `/usr/bin`; this allows you to pick up the versions we
endorse from `depot_tools`.

Chromium follows [PEP-8](https://www.python.org/dev/peps/pep-0008/).

It is also encouraged to follow advice from
[Google's Python Style Guide](https://google.github.io/styleguide/pyguide.html),
which is a superset of PEP-8.

See also:

- [ChromiumOS Python Style Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/styleguide/python.md)
- [Blink Python Style Guide](blink-python.md)

[TOC]

## Our Previous Python Style

Chromium used to differ from PEP-8 in the following ways:

- Use two-space indentation instead of four-space indentation.
- Use `CamelCase()` method and function names instead of `unix_hacker_style()`
  names.
- 80 character line limits rather than 79.

New scripts should not follow these deviations, but they should be followed when
making changes to files that follow them.

## Making Style Guide Changes

You can propose changes to this style guide by sending an email to
[`python@chromium.org`]. Ideally, the list will arrive at some consensus and you
can request review for a change to this file. If there's no consensus,
[`//styleguide/python/OWNERS`](https://chromium.googlesource.com/chromium/src/+/main/styleguide/python/OWNERS)
get to decide.

## Portability

There are a couple of differences in how text files are handled on Windows that
can lead to portability problems. These differences are:

- The default encoding when reading/writing text files is cp1252 on Windows and
  utf-8 on Linux, which can lead to Windows-only test failures. These can be
  avoided by always specifying `encoding='utf-8'` when opening text files.

- The default behavior when writing text files on Windows is to emit \\r\\n
  (carriage return line feed) line endings. This can lead to cryptic
  Windows-only test failures and is generally undesirable. This can be avoided
  by always specifying `newline=''` when opening text files for writing.

That is, use these forms when opening text files in Python:

- reading: with open(filename, 'r', encoding='utf-8') as f:
- writing: with open(filename, 'w', encoding='utf-8', newline='') as f:

## Tools

### pylint

[Depot tools](http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools.html)
contains a local copy of pylint, appropriately configured.

- Directories need to opt into pylint presubmit checks via:
  `input_api.canned_checks.RunPylint()`.

### YAPF

[YAPF](https://github.com/google/yapf) is the Python formatter used by:

```sh
git cl format --python
```

Directories can opt into enforcing auto-formatting by adding a `.style.yapf`
file with the following contents:

```
[style]
based_on_style = pep8
```

Entire files can be formatted (rather than just touched lines) via:

```sh
git cl format --python --full
```

YAPF has gotchas. You should review its changes before submitting. Notably:

- It does not re-wrap comments.
- It won't insert characters in order wrap lines. You might need to add ()s
  yourself in order to have to wrap long lines for you.
- It formats lists differently depending on whether or not they end with a
  trailing comma.

#### Bugs

- Are tracked here: https://github.com/google/yapf/issues.
- For Chromium-specific bugs, please discuss on [`python@chromium.org`].

#### Editor Integration

See: https://github.com/google/yapf/tree/main/plugins

[vpython]: https://chromium.googlesource.com/infra/infra/+/refs/heads/main/doc/users/vpython.md
[`python@chromium.org`]: https://groups.google.com/a/chromium.org/g/python
