3

I feel like I have a good grasp of what the __name__ environment variable is in python in general. However, when I print out the __name__ variable from an __init__.py it prints out the name of the directory it's in (aka the package name). How does __name__ get defined in the init file?

Also, does each python file have its own local __name__ variable? because it's constantly changing between files... (maybe I don't understand __name__ as well as I thought I did)


EDIT: I really don't think this question is the same as the __name__ equals __main__ question. I understand what __name__ equals in most python files. I'm just still confused on what it's value is in the __init__ files.

smci
  • 26,085
  • 16
  • 96
  • 138
Joshua Segal
  • 399
  • 3
  • 15
  • If any of the answers solved your question, it's good practice to upvote them and accept the best one. The latter also grants you a small rep bonus :) – Alec Aug 02 '19 at 17:15

1 Answers1

5

__name__ is a "magic" variable within Python's module system. It's simply the module name, or what you import something as. For example, /radical/__init__.py would mean that one could do the following

import radical

The __init__.py is how you indicate to Python that you want a folder treated as a module. This allows module hierarchies to be built from multiple files, rather than one giant file. Take for example this piece of code: /radical/utils.py

import utils from radical

Without the __init__.py Python treats it as an ordinary folder and so it won't have a module name.

If you run a script directly, __name__ is loaded as the __main__ module, which is why if __name__ == '__main__' checks that you're running the file instead of importing it.

Alec
  • 6,521
  • 7
  • 23
  • 48