Python Modules – Why Does CPython Have Both C and Python Versions of Modules?

modulespython

The CPython implementation seems to have the same modules written both in C (e.g., datetime in .c) and also in .py for the same module (e.g., datetime in .py).

My question is which version is used when I use datetime in my .py file when using the CPython interpreter? And why are there two module versions in the first place?

Best Answer

When there are two modules in the standard lib with the same name, what often has happened is that the original module was written in Python. That's because it is a lot easier to prototype and get it working quickly than in lower-level languages.

Later, once a reasonable design has been found and bugs fixed etc, performance may become a focus. It's a good time to write the slow parts in Cython or the C API and speed them up through compilation to machine code. Typically the additions are placed in a _module.so or DLL and imported from within the original module.py.

This avoids the work of prototyping/writing the entire thing in the C API, which is quite tedious.