I've seen this part of PEP-8 https://www.python.org/dev/peps/pep-0008/#package-and-module-names
I'm not clear on whether this refers to the file name of a module/class/package.
If I had one example of each, should the filenames be all lower case with underscores if appropriate? Or something else?
2 Answers 2
Quoting https://www.python.org/dev/peps/pep-0008/#package-and-module-names:
Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged.
For classes:
Class names should normally use the CapWords convention.
And function and (local) variable names should be:
lowercase, with words separated by underscores as necessary to improve readability
See this answer for the difference between a module, class and package:
- A Python module is simply a Python source file, which can expose classes, functions and global variables.
- A Python package is simply a directory of Python module(s).
So PEP 8 tells you that:
- modules (filenames) should have short, all-lowercase names, and they can contain underscores;
- packages (directories) should have short, all-lowercase names, preferably without underscores;
- classes should use the CapWords convention.
PEP 8 tells that names should be short; this answer gives a good overview of what to take into account when creating variable names, which also apply to other names (for classes, packages, etc.):
- variable names are not full descriptors;
- put details in comments;
- too specific name might mean too specific code;
- keep short scopes for quick lookup;
- spend time thinking about readability.
To finish, a good overview of the naming conventions is given in the Google Python Style Guide.
-
7And I'll embarrassedly ask to confirm my understanding, modules contain classes - so you would use classes within modules and could have multiple classes in one module?darkace– darkace02/01/2016 17:13:19Commented Feb 1, 2016 at 17:13
-
7Yes, you can have 0, 1, or more classes in a module.agold– agold02/01/2016 17:14:47Commented Feb 1, 2016 at 17:14
-
3I am glad I found this in time before my project grew out of hand, as all my packages were following the CapsWords convention just like my classes.Bas Jansen– Bas Jansen08/16/2018 14:42:52Commented Aug 16, 2018 at 14:42
-
2@pypmannetjies this is actually another question, but I'd say that you should prefer long understandable names over short not understandable ones.agold– agold04/30/2019 12:50:01Commented Apr 30, 2019 at 12:50
-
2For package name, it says "the use of underscores is discouraged", not forbidden. In python philosophy, you should follow the rule, "although practicality beats purity". Of course, the best is to find a way to follow the rule and be practical (maybe make several packages to split the name,
some
>long
>name
instead ofsomelongname
?)Juh_– Juh_05/06/2019 09:06:55Commented May 6, 2019 at 9:06
Here is a link for different types of Python name conventions:
Type Public Internal Packages lower_with_under
Modules lower_with_under
_lower_with_under
Classes CapWords
_CapWords
Exceptions CapWords
Functions lower_with_under()
_lower_with_under()
Global/Class Constants CAPS_WITH_UNDER
_CAPS_WITH_UNDER
Global/Class Variables lower_with_under
_lower_with_under
Instance Variables lower_with_under
_lower_with_under
Method Names lower_with_under()
_lower_with_under()
Function/Method Parameters lower_with_under
Local Variables lower_with_under
The style guide for Python is based on Guido’s naming convention recommendations.
-
44This answer crucially misses the filename part of the question.Grant Birchmeier– Grant Birchmeier08/24/2021 20:43:39Commented Aug 24, 2021 at 20:43
-
8Yes and no. A module is usually a file. (Not my favourite part of Python.)MEMark– MEMark02/01/2022 14:10:39Commented Feb 1, 2022 at 14:10
-
2well since there is no clear distinction between the two, i would keep filenames to
my-test-script.py
for readability.my_test_script.py
looks good but might have all sorted of weird contradictions with PEP?mirageglobe– mirageglobe08/21/2022 14:43:04Commented Aug 21, 2022 at 14:43 -
5@mirageglobe importing modules from my-test-script.py wouldn't be as straight forward as my_test_script.py, I guess.helloworld– helloworld10/17/2023 13:08:47Commented Oct 17, 2023 at 13:08
Explore related questions
See similar questions with these tags.
FooBar
andFooBiz
might both go in filesomepkg/foobar.py
(thus:from somepkg.foobar import FooBar
) but classTimerError
could go inexcept/timer_error.py
(thusfrom except.timer_error import TimerError
), since removing theCamelCase
sometimes makes the word harder to read, thussnake_case
may be used for the filename.