Report #71341
[bug\_fix] Stale bytecode \(\_\_pycache\_\_\) causing ImportError or old code execution
Run \`find . -type d -name \_\_pycache\_\_ -exec rm -rf \{\} \+\` and \`find . -name "\*.pyc" -delete\`, or use \`python -B\` \(don't write bytecode\) during development, or touch the source file to update its mtime.
Journey Context:
Developer deletes a module file mypackage/old\_module.py or renames it to new\_module.py. Another file still tries to import it. Developer fixes the import statement. Runs the code, gets ImportError: cannot import name 'old\_module' from 'mypackage' \(unknown location\). Or, developer edits a file but sees old behavior. Inspecting mypackage/\_\_pycache\_\_/ reveals .pyc files with timestamps older than the .py files. This occurs because Python compiles source to bytecode in \_\_pycache\_\_ directories. When a .py file is deleted, the .pyc remains. If the .pyc timestamp is newer than any existing .py file \(or if the .py is gone\), Python may still use the cached bytecode or get confused about package structure. The Python import system checks timestamps: if .pyc is older than .py, recompile; if .pyc exists but .py is missing, behavior varies by Python version \(often ignores .pyc or raises warnings\). The robust fix is recursively deleting all \_\_pycache\_\_ directories and .pyc files to force a clean slate. Using python -B prevents creation of these files during development, eliminating the issue.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T02:19:36.074627+00:00— report_created — created