How do I find the location of Python module sources?
For a pure python module you can find the source by looking at
themodule.__file__.The datetime module, however, is written in C, and therefore
datetime.__file__ points to a .so file (there is no
datetime.__file__ on Windows), and therefore, you can't see the source.
If you download a python source tarball and extract it, the modules' code can be found in the Modules subdirectory.
For example, if you want to find the datetime code for python 2.6, you can look at
You can also find the latest Mercurial version on the web at https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c
python -v from the command line should tell you what is being imported and from where. This works for me on Windows and Mac OS X.
C:\>python -v# installing zipimport hookimport zipimport # builtin# installed zipimport hook# C:\Python24\lib\site.pyc has bad mtimeimport site # from C:\Python24\lib\site.py# wrote C:\Python24\lib\site.pyc# C:\Python24\lib\os.pyc has bad mtimeimport os # from C:\Python24\lib\os.py# wrote C:\Python24\lib\os.pycimport nt # builtin# C:\Python24\lib\ntpath.pyc has bad mtime...
I'm not sure what those bad mtime's are on my install!
I realize this answer is 4 years late, but the existing answers are misleading people.
The right way to do this is never
__file__, or trying to walk through
sys.path and search for yourself, etc. (unless you need to be backward compatible beyond 2.1).
inspect module—in particular,
Unless you want to learn and implement the rules (which are documented, but painful, for CPython 2.x, and not documented at all for other implementations, or 3.x) for mapping
.py files; dealing with .zip archives, eggs, and module packages; trying different ways to get the path to
.pyd files that don't support
__file__; figuring out what Jython/IronPython/PyPy do; etc. In which case, go for it.
Meanwhile, every Python version's source from 2.0+ is available online at
http://hg.python.org/cpython/file/X.Y/ (e.g., 2.7 or 3.3). So, once you discover that
inspect.getfile(datetime) is a
.pyd file like
/usr/local/lib/python2.7/lib-dynload/datetime.so, you can look it up inside the Modules directory. Strictly speaking, there's no way to be sure of which file defines which module, but nearly all of them are either
foomodule.c, so it shouldn't be hard to guess that datetimemodule.c is what you want.