Why Python Creates .pyc Files when it is Interpreted Language?

What are .pyc files when Python is interpreted/interpreter language? Well, this often confuses a lot of people. They consider the .pyc files to be the compiled version of the .py file, which is not true. In this article, we will learn why python generates the .pyc files if it claims to be an interpreted language.

Python is a popular high-level interpreted language, meaning that code is executed by an interpreter rather than compiled into machine code. It is faster for development, but Python code can be slower to execute than compiled languages like C or Java.

To speed up the execution of Python code, we can use .pyc files. These are compiled bytecode files. They are generated by the Python interpreter so that the interpreter can load them to speed up the execution of Python code.

Let’s see what these types of files mean and how python generates these files with examples

1. What are .pyc Files?

When you execute a Python script, the interpreter reads the source code and translates it into bytecode (.pyc files), the bytecode is not human-readable, but it is faster to execute than the source code.

Python interpreter does not save the bytecode to disk. However, it can be configured to generate and save compiled bytecode files with a .pyc extension. These .pyc files are binary files that contain the bytecode for the corresponding .py source file. The main purpose of .pyc files is to improve the performance of Python scripts.

If you are familiar with Java, .pyc files are similar to .class files in Java.

2. How are .pyc Files Generated?

The Python interpreter generates .pyc files automatically when a .py file is imported or executed. When a Python script is executed, the interpreter first checks if there is a corresponding .pyc file for that script.

If there is the .pyc file, and the modification time of the .pyc file is later than that of the .py file, then the interpreter loads the bytecode from the .pyc file instead of recompiling the .py file. If there is no .pyc file or existing .pyc file modification time is not later than .py file, then the interpreter compiles the .py file into bytecode which ideally creates a .pyc file.

3. Why Python Generate .pyc Files

Python generate theses .pyc files for a few reasons:

  1. It makes the execution Faster
  2. It reduces memory usage
  3. This can make it easier to distribute Python scripts without having to worry about platform-specific issues.
  4. Bytecode in the .pyc file is not human-readable, it can provide a degree of protection for the source code.
  5. It is possible to decompile .pyc files back into source code, the resulting code is often difficult to understand.

4. Create .pyc file Manually

Though python creates the .pyc files automatically, however, we can also manually generate the python .pyc files for a python .py files.

To create a compiled .pyc file for a module that hasn’t been imported yet, you can use the py_compile and compileall modules in Python. The py_compile module provides a way to manually compile any module, including one that hasn’t been imported yet. To use this module, you can call the py_compile.compile() function and specify the name of the module you want to compile as an argument.


# Compile the module manually
import py_compile

# Put the name of the module
py_compile.compile('app.py')

You can also use the compileall module to automatically compile all Python files in a directory or directories.


# Compile all python code
import compileall

# Compile all Python files in a directory
compileall.compile_dir('./code_to_be_compiled')

You can also use this method via the command prompt:


# Generate .pyc files from command line
python -m compileall /path/output_dir

5. Summary and Conclusion

You now know the reason why Python creates .pyc files while python is being interpreted/interpreter language. I hope this article was helpful. If you have any questions please feel free to put them in the comment section.

Happy Learning!

Related Article

AlixaProDev

I am an astute software engineer with extensive 3+ years of experience in developing full-stack web applications. My skillets include building backend services for different databases. Mainly I work with Python, Flask, Django, and FastAPIs. Being Python Specialist, I have worked with Numpy, Pandas, and other Python Libraries to build tools that make ETL normalization easier.

Leave a Reply