Where does the variable __spec__ come from?
$ brew install python3 $ python3 Python 3.4.2 (default, Jan 5 2015, 11:57:21) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin Type "help", "copyright", "credits" or "license" for more information. # Under Python 2.7.x this gives a NameError >>> None is __spec__ True 12 Answers
From the Python Language Reference, Part 5: The Import System (emphasis mine):
2The
__spec__attribute must be set to the module spec that was used when importing the module. This is used primarily for introspection and during reloading. Setting__spec__appropriately applies equally to modules initialized during interpreter startup. The one exception is__main__, where__spec__is set to None in some cases.New in version 3.4.
According to Python 3 docs, __spec__ is always None if you are using interactive promt:
When Python is started with the -m option,
__spec__is set to the module spec of the corresponding module or package.__spec__is also populated when the__main__module is loaded as part of executing a directory, zipfile or other sys.path entry.In the remaining cases
__main__.__spec__is set to None, as the code used to populate the__main__does not correspond directly with an importable module:
- interactive prompt
- -c switch
- running from stdin
- running directly from a source or bytecode file