What's Actually Happening
Python cannot import modules. Applications fail with ModuleNotFoundError, ImportError, or cannot find installed packages.
The Error You'll See
ModuleNotFoundError:
>>> import requests
ModuleNotFoundError: No module named 'requests'ImportError:
>>> from flask import Flask
ImportError: cannot import name 'Flask' from 'flask'Package in wrong Python:
```bash python script.py ModuleNotFoundError: No module named 'pandas'
# But package installed: pip list | grep pandas pandas 2.0.0 ```
Why This Happens
- 1.Package not installed - Module not in environment
- 2.Wrong Python version - Package in different Python
- 3.Virtual env not active - Wrong environment
- 4.Path issue - Module not in Python path
- 5.Package name mismatch - Import name differs from package name
- 6.Circular import - Circular dependency in code
- 7.Permission issue - Cannot read module files
Step 1: Check Python Version
```bash python --version
python3 --version
which python which python3
# Check Python path: python -c "import sys; print(sys.executable)" python -c "import sys; print(sys.path)"
# Use correct Python: python3 script.py ```
Step 2: Check Virtual Environment
```bash # Check if venv active: echo $VIRTUAL_ENV
which python
# Activate venv: source venv/bin/activate
# Or conda: conda activate myenv
# Check pip location: which pip pip --version
# Create venv: python -m venv venv source venv/bin/activate ```
Step 3: Install Missing Package
```bash pip install package-name
pip3 install package-name
# Install specific version: pip install package-name==1.0.0
# Install from requirements: pip install -r requirements.txt
# Upgrade pip: pip install --upgrade pip
# List installed: pip list pip freeze ```
Step 4: Check Package Location
```bash # Where package installed: pip show package-name
# Package location: python -c "import package; print(package.__file__)"
# Check if in path: python -c "import sys; print(sys.path)"
# Add to path: export PYTHONPATH=/path/to/modules:$PYTHONPATH ```
Step 5: Handle Package Name Mismatch
```bash # Common mismatches: # Package: beautifulsoup4, Import: bs4 pip install beautifulsoup4 # import bs4
# Package: PyYAML, Import: yaml pip install PyYAML # import yaml
# Package: python-dateutil, Import: dateutil pip install python-dateutil # import dateutil
# Check package metadata: pip show package-name ```
Step 6: Fix Circular Import
```python # Circular import error: # module_a imports module_b # module_b imports module_a
# Solution 1: Import inside function def my_function(): from module_b import something something()
# Solution 2: Restructure code # Move shared code to module_c
# Solution 3: Use TYPE_CHECKING from typing import TYPE_CHECKING
if TYPE_CHECKING: from module_b import Something ```
Step 7: Check Module Files
```bash # Check package files: pip show -f package-name | head -20
# Check installed location: ls -la /path/to/site-packages/package-name/
# Check __init__.py: ls -la /path/to/package/__init__.py
# Verify package: python -c "import package; print(dir(package))" ```
Step 8: Reinstall Package
```bash # Uninstall: pip uninstall package-name
# Reinstall: pip install package-name
# Force reinstall: pip install --force-reinstall package-name
# Clean install: pip cache purge pip install --no-cache-dir package-name ```
Step 9: Check Permissions
```bash # Permission denied: ls -la /path/to/site-packages/
# User install: pip install --user package-name
# Fix permissions: chmod -R 755 /path/to/site-packages/
# Use venv instead: python -m venv venv source venv/bin/activate pip install package-name ```
Step 10: Debug Import
```python # Debug import: import sys print("Python:", sys.executable) print("Path:", sys.path)
try: import module_name print("Module location:", module_name.__file__) except ImportError as e: print("Import error:", e) except ModuleNotFoundError as e: print("Module not found:", e)
# Check what can be imported: import importlib.util spec = importlib.util.find_spec("module_name") if spec: print("Found at:", spec.origin) else: print("Not found") ```
Python Import Error Checklist
| Check | Command | Expected |
|---|---|---|
| Python version | python --version | Correct version |
| Virtual env | echo $VIRTUAL_ENV | Active if needed |
| Package installed | pip list | Package present |
| Correct pip | which pip | Matches Python |
| Python path | sys.path | Contains package |
| Import name | pip show | Correct import |
Verify the Fix
```bash python -c "import package_name; print(package_name.__version__)"
pip show package_name
python script.py
pip list | grep package_name
python -c "import sys; print(sys.executable)" ```
Related Issues
- [Fix Python Module Not Found](/articles/fix-python-module-not-found)
- [Fix Python Virtual Environment Failed](/articles/fix-python-virtual-environment-failed)
- [Fix Python Pip Install Failed](/articles/fix-python-pip-install-failed)