What's Actually Happening

Python package was installed in virtual environment but cannot be imported. ModuleNotFoundError occurs when trying to use the package.

The Error You'll See

```python >>> import mypackage

ModuleNotFoundError: No module named 'mypackage' ```

Package installed but not found:

```bash $ pip install mypackage Successfully installed mypackage-1.0.0

$ python -c "import mypackage" ModuleNotFoundError: No module named 'mypackage' ```

Wrong Python version:

```bash $ python3 -c "import mypackage" # Works

$ python -c "import mypackage" # Fails (Python 2) ```

Wrong virtual environment:

```bash $ pip show mypackage

Location: /path/to/venv1/lib/python3.11/site-packages

# But running from venv2 ```

Why This Happens

  1. 1.Wrong virtual environment - Package installed in different venv
  2. 2.Not activated - Virtual environment not activated
  3. 3.PATH issue - Python not using venv's Python
  4. 4.Different Python version - Package for Python 3.x, running Python 2.x
  5. 5.pip vs pip3 - Installing with pip for wrong Python
  6. 6.User install - Package installed to --user, not in venv

Step 1: Check Virtual Environment Activation

```bash # Check if venv is activated: echo $VIRTUAL_ENV

# Should show path to venv # Empty = not activated

# Check Python path: which python

# Should point to venv/bin/python # e.g., /path/to/venv/bin/python

# Check pip path: which pip

# Should point to venv/bin/pip

# Activate virtual environment: source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows

# Check activation indicator: # Prompt should show (venv) prefix

# Verify activation: python -c "import sys; print(sys.prefix)"

# Should show venv path, not system Python ```

Step 2: Verify Package Installation

```bash # Check if package is installed in venv: pip show mypackage

# Shows: # Name: mypackage # Version: 1.0.0 # Location: /path/to/venv/lib/python3.11/site-packages

# Check location matches venv: # Location should be in your VIRTUAL_ENV path

# List installed packages: pip list

# Freeze all packages: pip freeze

# Check specific package: pip freeze | grep mypackage

# Check package details: pip show -f mypackage

# Check package location: pip show mypackage | grep Location

# Verify package files exist: ls /path/to/venv/lib/python3.11/site-packages/mypackage* ```

Step 3: Check Python Executable

```bash # Check which Python is running: which python

# If not in venv, deactivate and reactivate: deactivate source venv/bin/activate

# Check Python version: python --version

# Check full path: python -c "import sys; print(sys.executable)"

# Should be: /path/to/venv/bin/python

# Check Python location: ls -la venv/bin/python*

# Should have python, python3, python3.x links

# Use explicit venv Python: /path/to/venv/bin/python -c "import mypackage"

# If this works, activation issue

# Create venv with specific Python: python3.11 -m venv venv ```

Step 4: Check pip Installation Location

```bash # Which pip was used: which pip

# Use venv's pip explicitly: venv/bin/pip install mypackage

# Check pip version: pip --version

# Shows: pip 23.x from /path/to/venv/lib/python...

# Package installed to wrong location: pip show mypackage | grep Location

# If Location is /home/user/.local/lib... # It's installed with --user, not in venv

# Reinstall in venv: pip install --force-reinstall mypackage

# Or use explicit pip: venv/bin/pip install mypackage

# Check for user installation: pip config list | grep user

# Uninstall and reinstall: pip uninstall mypackage venv/bin/pip install mypackage ```

Step 5: Fix PATH Issues

```bash # Check PATH: echo $PATH

# After activation, venv/bin should be first: # /path/to/venv/bin:/usr/bin:/bin:...

# If venv/bin not in PATH: # Check activate script: cat venv/bin/activate

# PATH manipulation should be there

# Fix PATH manually: export PATH="/path/to/venv/bin:$PATH"

# Check activate script content: grep PATH venv/bin/activate

# Re-create venv if activate is broken: python3 -m venv venv --clear

# Or recreate: rm -rf venv python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ```

Step 6: Check Python Version Compatibility

```bash # Check Python version: python --version

# Check package requirements: pip show mypackage | grep Requires-Python

# If package requires Python 3.8+: # And you're using Python 3.7, won't work

# Check venv Python version: venv/bin/python --version

# Recreate venv with correct Python: python3.11 -m venv venv

# Check available Python versions: ls /usr/bin/python*

# Use specific Python: python3.11 -m venv venv source venv/bin/activate

# Install package for correct version: pip install mypackage ```

Step 7: Reinstall Package Properly

```bash # Clear pip cache: pip cache purge

# Uninstall existing: pip uninstall mypackage -y

# Reinstall in active venv: pip install mypackage

# With version: pip install mypackage==1.0.0

# From requirements: pip install -r requirements.txt

# Verify installation: pip show mypackage

# Test import: python -c "import mypackage; print('OK')"

# Force reinstall: pip install --force-reinstall --no-cache-dir mypackage

# Install specific version from PyPI: pip install mypackage --index-url https://pypi.org/simple/ ```

Step 8: Check Package Module Structure

```bash # Check package structure: pip show -f mypackage | head -20

# List package files: ls /path/to/venv/lib/python3.11/site-packages/mypackage/

# Check for __init__.py: ls /path/to/venv/lib/python3.11/site-packages/mypackage/__init__.py

# If missing, package might be single file: ls /path/to/venv/lib/python3.11/site-packages/mypackage.py

# Import with correct name: # Package name != import name sometimes

# Check package metadata: pip show mypackage

# Check import name: cat /path/to/venv/lib/python3.11/site-packages/mypackage-*.dist-info/top_level.txt

# Example: # Package name: beautifulsoup4 # Import name: bs4 python -c "import bs4" # Works python -c "import beautifulsoup4" # Fails ```

Step 9: Fix Virtual Environment Issues

```bash # Recreate venv from scratch: rm -rf venv python3 -m venv venv source venv/bin/activate

# Install all packages: pip install -r requirements.txt

# Check venv configuration: cat venv/pyvenv.cfg

# Should show: # home = /usr/bin/python3 # include-system-site-packages = false

# Enable system packages (if needed): python3 -m venv venv --system-site-packages

# Use virtualenv (alternative): pip install virtualenv virtualenv venv

# Use poetry (alternative): poetry install

# Use conda (alternative): conda create -n myenv python=3.11 conda activate myenv conda install mypackage ```

Step 10: Python Venv Package Verification Script

```bash # Create verification script: cat << 'EOF' > /usr/local/bin/check-pyvenv-package.sh #!/bin/bash

PACKAGE=$1

echo "=== Virtual Environment Status ===" echo "VIRTUAL_ENV: $VIRTUAL_ENV" echo "Python path: $(which python)" echo "pip path: $(which pip)"

echo "" echo "=== Python Version ===" python --version python -c "import sys; print('Executable:', sys.executable)" python -c "import sys; print('Prefix:', sys.prefix)"

echo "" echo "=== PATH (first 5) ===" echo $PATH | tr ':' '\n' | head -5

if [ -n "$PACKAGE" ]; then echo "" echo "=== Package: $PACKAGE ===" pip show $PACKAGE || echo "Package not found"

echo "" echo "=== Package Location ===" LOCATION=$(pip show $PACKAGE | grep Location | cut -d' ' -f2) echo "Location: $LOCATION"

if [ -n "$VIRTUAL_ENV" ]; then if [[ "$LOCATION" == *"$VIRTUAL_ENV"* ]]; then echo "Package is in active venv: YES" else echo "Package is in active venv: NO" echo "Package installed elsewhere!" fi fi

echo "" echo "=== Import Test ===" python -c "import $PACKAGE; print('Import: SUCCESS')" || echo "Import: FAILED" fi

echo "" echo "=== Installed Packages ===" pip list | head -20

echo "" echo "=== Recommendations ===" if [ -z "$VIRTUAL_ENV" ]; then echo "WARNING: No virtual environment active" echo "Activate: source venv/bin/activate" fi EOF

chmod +x /usr/local/bin/check-pyvenv-package.sh

# Usage: /usr/local/bin/check-pyvenv-package.sh mypackage

# Quick check: alias venv-check='echo "VENV: $VIRTUAL_ENV" && which python && which pip' ```

Python Venv Package Checklist

CheckCommandExpected
Venv activatedecho $VIRTUAL_ENVPath to venv
Python pathwhich pythonvenv/bin/python
pip pathwhich pipvenv/bin/pip
Package locationpip showIn VIRTUAL_ENV
Import testpython -c "import pkg"Success
Python versionpython --versionMatches requirements

Verify the Fix

```bash # After fixing package issue

# 1. Check activation echo $VIRTUAL_ENV // /path/to/venv

# 2. Check Python path which python // /path/to/venv/bin/python

# 3. Check package location pip show mypackage | grep Location // In VIRTUAL_ENV path

# 4. Test import python -c "import mypackage" // No error

# 5. Run application python app.py // Works correctly

# 6. Check all requirements pip list // All packages installed ```

  • [Fix Python ModuleNotFoundError](/articles/fix-python-modulenotfounderror)
  • [Fix Python Virtual Environment Not Activating](/articles/fix-python-virtual-environment-not-activating)
  • [Fix Python pip Install Failed](/articles/fix-python-pip-install-failed)