What's Actually Happening

Python cannot import modules. Applications fail with ModuleNotFoundError, ImportError, or cannot find installed packages.

The Error You'll See

ModuleNotFoundError:

python
>>> import requests
ModuleNotFoundError: No module named 'requests'

ImportError:

python
>>> 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. 1.Package not installed - Module not in environment
  2. 2.Wrong Python version - Package in different Python
  3. 3.Virtual env not active - Wrong environment
  4. 4.Path issue - Module not in Python path
  5. 5.Package name mismatch - Import name differs from package name
  6. 6.Circular import - Circular dependency in code
  7. 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

CheckCommandExpected
Python versionpython --versionCorrect version
Virtual envecho $VIRTUAL_ENVActive if needed
Package installedpip listPackage present
Correct pipwhich pipMatches Python
Python pathsys.pathContains package
Import namepip showCorrect 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)" ```

  • [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)