Q:

What is the difference between pyc and pyo files in Python?

I see that .pyc and .pyo file are both compiled python code. What is difference between them and when I should use one or another?

A:

.pyc files are python files compiled to byte code by the interpreter.  They are generated normally when a file is imported.
.pyo are compiled byte code without line numbers, assertions, and some other things (possibly doc strings) for optimzation purposes.  
when invoking the python interpreter, you may pass the -O or -OO option to generate a .pyo file.  Using -O will throw out the line numbers, assertions, and  some debugging info.  -OO will result in a .pyo file also stripped of docstrings.

