Skip to content
Topics
Python
Understanding pycache in Python: Everything You Need to Know

Understanding pycache in Python: Everything You Need to Know

If you've ever run a Python script, you might have noticed a peculiar folder that gets created in your project directory. This folder, named __pycache__, might seem mysterious at first, but it plays a crucial role in how Python executes your scripts. This article will demystify the __pycache__ folder, explaining its purpose, how it works, and how you can manage it effectively in your Python projects.

Python is an interpreted language, which means that it converts your source code into a format that your computer can understand and execute. This conversion process can take some time, especially for larger scripts. To speed up this process, Python saves the converted code into a __pycache__ folder in the form of .pyc files. These files are a form of bytecode that Python can execute much faster than the original source code.

Want to quickly create Data Visualization from Python Pandas Dataframe with No code?

PyGWalker is a Python library for Exploratory Data Analysis with Visualization. PyGWalker (opens in a new tab) can simplify your Jupyter Notebook data analysis and data visualization workflow, by turning your pandas dataframe (and polars dataframe) into a Tableau-style User Interface for visual exploration.

PyGWalker for Data visualization (opens in a new tab)

What is pycache in Python?

The __pycache__ folder is a directory that Python creates in your project when you run a script. This folder contains .pyc files, which are compiled versions of your Python scripts. These files are in a format called bytecode, which is a low-level set of instructions that can be executed by a Python interpreter.

When you run a Python script, the interpreter first checks if there is a corresponding .pyc file in the __pycache__ folder. If there is, and the .pyc file is up-to-date, Python will execute this file instead of the original script. This is because executing bytecode is much faster than interpreting source code.

However, if the .pyc file is outdated (i.e., the source script has been modified since the .pyc file was created), or if there is no .pyc file at all, Python will recompile the script and update or create the .pyc file in the __pycache__ folder.

Where is the pycache folder located?

The __pycache__ folder is located in the same directory as the Python script that is being executed. For example, if you have a script named main.py in a directory named my_project, running main.py will create a __pycache__ folder in the my_project directory.

Inside the __pycache__ folder, you will find .pyc files corresponding to each Python script that has been run in the parent directory. The names of these files match the names of the original scripts, but with a .pyc extension instead of .py.

How does pycache speed up the execution of Python scripts?

The __pycache__ folder and its .pyc files help speed up the execution of Python scripts by storing bytecode, which is a pre-compiled version of your script. Bytecode is faster for Python to execute than the original source code because it is a lower-level format that is closer to machine code.

When you run a Python script, the interpreter has to parse the source code, convert it into an abstract syntax tree (AST), and then compile this AST into bytecode. This process can take some time, especially for larger scripts

Can I delete the pycache folder?

Yes, you can delete the __pycache__ folder. Deleting this folder will not affect the execution of your Python scripts. However, the next time you run your scripts, Python will have to recompile them into bytecode, which may slow down the initial execution slightly. This is because Python will need to recreate the __pycache__ folder and the .pyc files it contains.

If you're worried about the __pycache__ folder cluttering up your project directory, you can use a simple command to delete all __pycache__ folders recursively. Here's how you can do it:

find . -type d -name __pycache__ -exec rm -r {} \+

This command will find all directories named __pycache__ in the current directory and its subdirectories and delete them.

How do I disable the creation of pycache files in Python?

While the __pycache__ folder and its .pyc files can help speed up the execution of your Python scripts, there might be situations where you want to disable their creation. For example, you might be working on a small script where the compilation time is negligible, or you might want to avoid cluttering your project directory with __pycache__ folders.

You can disable the creation of __pycache__ folders and .pyc files by setting the PYTHONDONTWRITEBYTECODE environment variable. You can do this directly in your terminal with the following command:

export PYTHONDONTWRITEBYTECODE=1

After running this command, Python will no longer create __pycache__ folders or .pyc files until the end of your current terminal session. If you want to make this change permanent, you can add the above line to your shell's startup file (e.g., ~/.bashrc or ~/.bash_profile for the Bash shell).

How to Ignore pycache Files in Git

When working with Git, it's common to ignore certain files or directories that don't need to be version controlled. The __pycache__ directory is a prime candidate for this, as it contains compiled bytecode that is machine-specific and doesn't need to be shared between different environments.

To ignore __pycache__ directories in Git, you can add a line to your .gitignore file:

__pycache__/

This line tells Git to ignore all __pycache__ directories, no matter where they are located in your project. Now, when you run git status, you'll see that __pycache__ directories and their contents are no longer listed as untracked files.

What Happens If I Delete the pycache Folder?

Deleting the __pycache__ folder will not affect the execution of your Python scripts. The __pycache__ folder is not necessary for running Python scripts; it merely helps speed up the execution of scripts that have been run before.

When you delete the __pycache__ folder and then run a Python script, Python will recompile the script into bytecode and recreate the __pycache__ folder and the corresponding .pyc file. This process might slow down the initial execution of the script slightly, but subsequent executions will be faster, as Python can use the bytecode stored in the .pyc file.


Now, let's answer some frequently asked questions about __pycache__ in Python.

FAQ

  1. What is the purpose of the __pycache__ folder in Python?

The __pycache__ folder is created by Python when you run a script. It contains .pyc files, which are compiled versions of your Python scripts. These files are in a format called bytecode, which Python can execute faster than the original source code.

  1. Can I delete the __pycache__ folder?

Yes, you can delete the __pycache__ folder. Deleting this folder will not affect the execution of your Python scripts. However, the next time you run your scripts, Python will have to recompile them into bytecode, which may slow down the initial execution slightly.

  1. How can I ignore __pycache__ files in Git?

To ignore __pycache__ directories in Git, you can add the following line to your .gitignore file: __pycache__/. This tells Git to ignore all __pycache__ directories, no matter where they are located in your project.