Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /main /. /styleguide /python /python.md
blob: f1df3e79701a5b3b69c94249d51ba7d821639240 [file] [log] [blame] [view]
Andrew Grieve32bc5e0d2020-01-03 19:39:52[diff] [blame]1# Chromium Python Style Guide
Peter Wendcdb2ec2018-11-26 23:00:36[diff] [blame]2
3_For other languages, please see the[Chromium style
John Palmerbe051302021-05-19 11:48:35[diff] [blame]4guides](https://chromium.googlesource.com/chromium/src/+/main/styleguide/styleguide.md)._
Peter Wendcdb2ec2018-11-26 23:00:36[diff] [blame]5
zhoupeng6ebd49d2025-04-03 20:45:00[diff] [blame]6The minimum supportedPython versionis3.9, we recommendusingPython3.11
7(asin, that's what the bots use, so don't assumeorrequire anything older
8*or* newer), but most newer versions ofPython3 will work finefor most
9things.Thereis an appropriate version ofPython3in
10`$depot_tools/python-bin`,if you don't have one already.
Dirk Prankecc232342021-05-13 22:20:12[diff] [blame]11
12We (often) use a tool called [vpython] to manage Python packages; vpython
13is a wrapper around virtualenv. However, it is not safe to use vpython
14regardless of context, as it can have performance issues. All tests are
Bruce Dawson942f9bcd2022-08-10 18:40:22[diff] [blame]15run under vpython, so it is safe there, and vpython is the default for
16running scripts during PRESUBMIT checks (input_api.python3_executable points to
17vpython3 and is used in GetPythonUnitTests), but you should not use vpython
18during gclient runhooks, or during the build unless a
19[//build/OWNER](../../build/OWNERS) has told you that it is okay to do so.
Dirk Prankecc232342021-05-13 22:20:12[diff] [blame]20
21Also, there is some performance overhead to using vpython, so prefer not
22to use vpython unless you need it (to pick up packages not available in the
23source tree).
24
25"shebang lines" (the first line of many unix scripts, like `#!/bin/sh`)
26aren'tas usefulas you might thinkinChromium, because
27most ofour python invocations comefrom other tools likeNinjaor
28the swarming infrastructure,and they also don't work on Windows.
Bruce Dawson942f9bcd2022-08-10 18:40:22[diff] [blame]29So, don't expect them to help you.That said, a python3 shebangis one way to
30indicate to the presubmit system that test scripts should be run underPython3
31rather thanPython2.
Dirk Prankecc232342021-05-13 22:20:12[diff] [blame]32
33However,if your scriptis executable, you should stilluse one,andfor
David Munro9980b2c2022-02-02 15:30:41[diff] [blame]34Python you shoulduse`#!/usr/bin/env python3`or`#!/usr/bin/env vpython3`
Dirk Prankecc232342021-05-13 22:20:12[diff] [blame]35in order to pick up the right version ofPythonfrom your $PATH rather than
36assuming you want the versionin`/usr/bin`;this allows you to pick up the
37versions we endorsefrom
38`depot_tools`.
39
Andrew Grieve32bc5e0d2020-01-03 19:39:52[diff] [blame]40Chromium follows[PEP-8](https://www.python.org/dev/peps/pep-0008/).
Peter Wendcdb2ec2018-11-26 23:00:36[diff] [blame]41
Andrew Grieve32bc5e0d2020-01-03 19:39:52[diff] [blame]42Itis also encouraged to follow advicefrom
43[Google's Python Style Guide](https://google.github.io/styleguide/pyguide.html),
44which is a superset of PEP-8.
45
46See also:
Brian Norris13e1fe422023-08-25 20:26:11[diff] [blame]47* [ChromiumOS Python Style Guide](https://chromium.googlesource.com/chromiumos/docs/+/HEAD/styleguide/python.md)
Andrew Grieve32bc5e0d2020-01-03 19:39:52[diff] [blame]48* [Blink Python Style Guide](blink-python.md)
49
50[TOC]
51
52## Our Previous Python Style
53
54Chromium used to differ from PEP-8 in the following ways:
55* Use two-space indentation instead of four-space indentation.
56* Use `CamelCase()` method and function names instead of `unix_hacker_style()`
57 names.
58* 80 character line limits rather than 79.
59
60New scripts should not follow these deviations, but they should be followed when
61making changes to files that follow them.
62
63## Making Style Guide Changes
Peter Wendcdb2ec2018-11-26 23:00:36[diff] [blame]64
65You can propose changes to this style guide by sending an email to
Takuto Ikuta8ba91152023-09-25 13:42:44[diff] [blame]66[`python@chromium.org`]. Ideally, the list will arrive at some consensus and you
Peter Wendcdb2ec2018-11-26 23:00:36[diff] [blame]67can request review for a change to this file. If there'sno consensus,
John Palmerbe051302021-05-19 11:48:35[diff] [blame]68[`//styleguide/python/OWNERS`](https://chromium.googlesource.com/chromium/src/+/main/styleguide/python/OWNERS)
Peter Wendcdb2ec2018-11-26 23:00:36[diff] [blame]69get to decide.
70
Bruce Dawson942f9bcd2022-08-10 18:40:22[diff] [blame]71## Portability
72
73There are a couple of differencesin how text files are handled onWindows that
74can lead to portability problems.These differences are:
75
76*Thedefault encodingwhen reading/writing text filesis cp1252 onWindowsand
77utf-8 onLinux, which can lead toWindows-only test failures.These can be
78avoidedby always specifying`encoding='utf-8'`when opening text files.
79
80*Thedefault behaviorwhen writing text files onWindowsis to emit \r\n
81(carriagereturn line feed) line endings.This can lead to crypticWindows-only
82test failuresandis generally undesirable.This can be avoidedby always
83specifying`newline=''`when opening text filesfor writing.
84
85Thatis,use these formswhen opening text filesinPython:
86
87* reading:with open(filename,'r', encoding='utf-8')as f:
88* writing:with open(filename,'w', encoding='utf-8', newline='')as f:
89
Peter Wendcdb2ec2018-11-26 23:00:36[diff] [blame]90## Tools
91
Andrew Grievea6dad4a2018-11-29 13:57:32[diff] [blame]92### pylint
Peter Wendcdb2ec2018-11-26 23:00:36[diff] [blame]93[Depot tools](http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools.html)
94contains alocal copy of pylint, appropriately configured.
Dirk Prankecc232342021-05-13 22:20:12[diff] [blame]95*Directories need to optinto pylint presubmit checks via:
Andrew Grievea6dad4a2018-11-29 13:57:32[diff] [blame]96`input_api.canned_checks.RunPylint()`.
97
98### YAPF
agrieve1a1b9066b2018-11-30 15:47:22[diff] [blame]99[YAPF](https://github.com/google/yapf) is the Python formatter used by:
Andrew Grievea6dad4a2018-11-29 13:57:32[diff] [blame]100
101```sh
102git cl format --python
103```
104
agrieve1a1b9066b2018-11-30 15:47:22[diff] [blame]105Directories can optinto enforcingauto-formattingby adding a`.style.yapf`
106filewith the following contents:
Andrew Grievea6dad4a2018-11-29 13:57:32[diff] [blame]107```
108[style]
Andrew Grieve83d4c6a92020-01-07 16:50:23[diff] [blame]109based_on_style = pep8
Andrew Grievea6dad4a2018-11-29 13:57:32[diff] [blame]110```
111
112Entire files can be formatted(rather than just touched lines) via:
113```sh
114git cl format --python --full
agrieve1a1b9066b2018-11-30 15:47:22[diff] [blame]115```
116
Andrew Grieve32bc5e0d2020-01-03 19:39:52[diff] [blame]117YAPF has gotchas.You should review its changes before submitting.Notably:
118*It doesnot re-wrap comments.
119*It won't insert characters in order wrap lines. You might need to add ()s
120 yourself in order to have to wrap long lines for you.
121 * It formats lists differently depending on whether or not they end with a
122 trailing comma.
123
124
agrieve1a1b9066b2018-11-30 15:47:22[diff] [blame]125#### Bugs
126* Are tracked here: https://github.com/google/yapf/issues.
Takuto Ikuta8ba91152023-09-25 13:42:44[diff] [blame]127* For Chromium-specific bugs, please discuss on [`python@chromium.org`].
agrieve1a1b9066b2018-11-30 15:47:22[diff] [blame]128
129#### Editor Integration
Dirk Prankecc232342021-05-13 22:20:12[diff] [blame]130See: https://github.com/google/yapf/tree/main/plugins
131
132[vpython]: https://chromium.googlesource.com/infra/infra/+/refs/heads/main/doc/users/vpython.md
Takuto Ikuta8ba91152023-09-25 13:42:44[diff] [blame]133[`python@chromium.org`]: https://groups.google.com/a/chromium.org/g/python

[8]ページ先頭

©2009-2025 Movatter.jp