Python Development Environment Setup
Complete guide to setting up Python on your computer for Universe 2025 (Tufty) Badge development, including virtual environments and all necessary tools.
Quick Start (First Time Setup)
If you're brand new and just want to get started quickly:
# 1. Check if Python is installed
python3 --version
# If not installed, see "Install Python" section below
# 2. Create project directory
mkdir ~/badge-projects
cd ~/badge-projects
# 3. Create virtual environment
python3 -m venv venv
# 4. Activate it
source venv/bin/activate # macOS/Linux
# venv\Scripts\Activate.ps1 # Windows
# 5. Install badge tools
pip install mpremote
# 6. Test badge connection
mpremote exec "print('Badge connected!')"
# Should print: Badge connected!
# ✓ You're ready! Continue to badger-quickstart skill
If any command fails, continue with the detailed instructions below.
Prerequisites Check
Before starting detailed setup, check what you already have:
# Check Python version python3 --version # Check pip pip3 --version # Check if tools are installed which mpremote which ampy which rshell
Install Python
macOS
Option 1: Using Homebrew (Recommended)
# Install Homebrew if not already installed /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # Install Python brew install python3 # Verify installation python3 --version pip3 --version
Option 2: Using python.org installer
- •Download from https://www.python.org/downloads/
- •Run installer
- •Check "Add Python to PATH"
- •Complete installation
Linux (Ubuntu/Debian)
# Update package list sudo apt update # Install Python 3 and pip sudo apt install python3 python3-pip python3-venv # Verify installation python3 --version pip3 --version
Linux (Fedora/RHEL)
# Install Python 3 sudo dnf install python3 python3-pip # Verify installation python3 --version pip3 --version
Windows
Option 1: Using winget (Windows 10/11)
# Install Python winget install Python.Python.3.11 # Restart terminal, then verify python --version pip --version
Option 2: Using python.org installer
- •Download from https://www.python.org/downloads/
- •Run installer
- •IMPORTANT: Check "Add Python to PATH"
- •Check "Install pip"
- •Complete installation
- •Restart terminal
Option 3: Using Microsoft Store
- •Open Microsoft Store
- •Search for "Python 3.11"
- •Install
- •Verify in terminal
Create Project Directory
Set up a dedicated directory for Badger 2350 projects:
# Create project directory mkdir -p ~/badger-projects cd ~/badger-projects # Create your first project mkdir my-badge-app cd my-badge-app
Set Up Virtual Environment
Virtual environments isolate project dependencies and prevent conflicts.
Create Virtual Environment
# Create venv in project directory python3 -m venv venv # Alternative name python3 -m venv .venv
Activate Virtual Environment
macOS/Linux:
# Activate source venv/bin/activate # Your prompt should change to show (venv) (venv) user@computer:~/badger-projects/my-badge-app$ # Deactivate when done deactivate
Windows (PowerShell):
# Enable script execution (first time only) Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # Activate venv\Scripts\Activate.ps1 # Deactivate when done deactivate
Windows (Command Prompt):
# Activate venv\Scripts\activate.bat # Deactivate when done deactivate
Verify Virtual Environment
# Should show venv Python, not system Python which python3 # macOS/Linux where python # Windows # Should be venv location like: # ~/badger-projects/my-badge-app/venv/bin/python3
Install Badger Development Tools
With virtual environment activated:
Core Tools
# Install mpremote (recommended primary tool) pip install mpremote # Install ampy (alternative file management) pip install adafruit-ampy # Install rshell (interactive shell) pip install rshell # Install esptool (firmware flashing) pip install esptool # Verify installations mpremote --version ampy --version rshell --version esptool.py version
Optional Development Tools
# Thonny IDE (beginner-friendly) pip install thonny # Code quality tools pip install black # Code formatter pip install pylint # Linter pip install mypy # Type checker # Testing tools pip install pytest # Testing framework pip install pytest-cov # Coverage reporting # Documentation tools pip install mkdocs # Documentation generator pip install sphinx # Alternative documentation
Save Dependencies
Create requirements.txt to track dependencies:
# Generate requirements.txt pip freeze > requirements.txt
Example requirements.txt:
mpremote==1.20.0 adafruit-ampy==1.1.0 rshell==0.0.32 esptool==4.6.2 black==23.12.1 pylint==3.0.3 pytest==7.4.3
Install from requirements.txt
# Install all dependencies at once pip install -r requirements.txt # Or upgrade existing pip install -r requirements.txt --upgrade
Configure Tools
mpremote Configuration
Create alias for easier use:
macOS/Linux (.bashrc or .zshrc):
# Add to ~/.bashrc or ~/.zshrc alias badge='mpremote connect /dev/tty.usbmodem*' # Reload shell source ~/.bashrc # or source ~/.zshrc # Usage badge ls badge cp main.py :main.py
Windows (PowerShell profile):
# Open profile
notepad $PROFILE
# Add alias
function badge { mpremote connect COM3 @args }
# Reload
. $PROFILE
# Usage
badge ls
ampy Configuration
Set default port to avoid typing it each time:
macOS/Linux:
# Add to ~/.bashrc or ~/.zshrc export AMPY_PORT=/dev/tty.usbmodem* # Reload source ~/.bashrc
Windows:
# Add to PowerShell profile
$env:AMPY_PORT = "COM3"
# Or set permanently
[Environment]::SetEnvironmentVariable("AMPY_PORT", "COM3", "User")
Verify Complete Setup
Run this verification script:
# verify_setup.sh (macOS/Linux)
#!/bin/bash
echo "Verifying Badger 2350 Development Setup"
echo "========================================"
# Check Python
if command -v python3 &> /dev/null; then
echo "✓ Python: $(python3 --version)"
else
echo "✗ Python not found"
exit 1
fi
# Check pip
if command -v pip3 &> /dev/null; then
echo "✓ pip: $(pip3 --version)"
else
echo "✗ pip not found"
exit 1
fi
# Check virtual environment
if [[ "$VIRTUAL_ENV" != "" ]]; then
echo "✓ Virtual environment: active"
else
echo "⚠ Virtual environment: not active"
fi
# Check tools
tools=(mpremote ampy rshell esptool.py)
for tool in "${tools[@]}"; do
if command -v $tool &> /dev/null; then
echo "✓ $tool: installed"
else
echo "✗ $tool: not installed"
fi
done
echo "========================================"
echo "Setup verification complete!"
Make executable and run:
chmod +x verify_setup.sh ./verify_setup.sh
Windows PowerShell version:
# verify_setup.ps1
Write-Host "Verifying Badger 2350 Development Setup"
Write-Host "========================================"
# Check Python
if (Get-Command python -ErrorAction SilentlyContinue) {
$version = python --version
Write-Host "✓ Python: $version"
} else {
Write-Host "✗ Python not found"
exit 1
}
# Check pip
if (Get-Command pip -ErrorAction SilentlyContinue) {
Write-Host "✓ pip: installed"
} else {
Write-Host "✗ pip not found"
exit 1
}
# Check virtual environment
if ($env:VIRTUAL_ENV) {
Write-Host "✓ Virtual environment: active"
} else {
Write-Host "⚠ Virtual environment: not active"
}
# Check tools
$tools = @("mpremote", "ampy", "rshell", "esptool.py")
foreach ($tool in $tools) {
if (Get-Command $tool -ErrorAction SilentlyContinue) {
Write-Host "✓ $tool: installed"
} else {
Write-Host "✗ $tool: not installed"
}
}
Write-Host "========================================"
Write-Host "Setup verification complete!"
Test Badge Connection
Once tools are installed, test connection to badge:
# List serial ports (macOS/Linux)
ls /dev/tty.usb*
# List serial ports (Windows PowerShell)
[System.IO.Ports.SerialPort]::getportnames()
# Test connection with mpremote
mpremote connect /dev/tty.usbmodem* exec "print('Hello from Badger!')"
# Or on Windows
mpremote connect COM3 exec "print('Hello from Badger!')"
# If successful, you should see: Hello from Badger!
Project Template
Create a standard project structure:
# Create structure
mkdir -p my-badge-app/{lib,assets,data,tests}
cd my-badge-app
# Create files
touch main.py config.py README.md requirements.txt
touch lib/__init__.py
touch tests/test_main.py
# Create .gitignore
cat > .gitignore <<EOF
# Virtual environment
venv/
.venv/
env/
# Python
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
# IDE
.vscode/
.idea/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
# Local config
config.local.py
.env
EOF
# Initialize git
git init
Project structure:
my-badge-app/
├── venv/ # Virtual environment (gitignored)
├── main.py # Main application
├── config.py # Configuration
├── requirements.txt # Python dependencies
├── README.md
├── .gitignore
├── lib/ # Reusable modules
│ └── __init__.py
├── assets/ # Images, fonts, etc.
├── data/ # Runtime data
└── tests/ # Test files
└── test_main.py
IDE Setup
VS Code (Recommended)
# Install VS Code # macOS brew install --cask visual-studio-code # Linux sudo snap install code --classic # Windows winget install Microsoft.VisualStudioCode
Recommended Extensions:
- •Python (Microsoft)
- •Pylance
- •Python Debugger
- •MicroPython (for syntax)
- •GitLens
VS Code Settings (.vscode/settings.json):
{
"python.defaultInterpreterPath": "${workspaceFolder}/venv/bin/python",
"python.formatting.provider": "black",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"editor.formatOnSave": true,
"files.exclude": {
"**/__pycache__": true,
"**/*.pyc": true
}
}
PyCharm
- •Download from https://www.jetbrains.com/pycharm/
- •Open project directory
- •Configure interpreter: Settings → Project → Python Interpreter
- •Select existing venv or create new one
Thonny (Beginner-Friendly)
# Install Thonny pip install thonny # Or download from https://thonny.org # Run thonny
Configure Thonny for Badger:
- •Tools → Options → Interpreter
- •Select "MicroPython (RP2040)"
- •Select correct port
- •Click OK
Workflow Scripts
Activate Script
Create activate.sh in project root:
#!/bin/bash # activate.sh - Quick project activation # Activate virtual environment source venv/bin/activate # Set badge port export BADGE_PORT="/dev/tty.usbmodem*" # Show status echo "Badge development environment activated!" echo "Python: $(which python3)" echo "Badge port: $BADGE_PORT" # Quick commands alias badge='mpremote connect $BADGE_PORT' alias deploy='./deploy.sh' echo "Ready to develop!"
Usage:
source activate.sh # Now you're ready to work!
Quick Deploy Script
Create deploy.sh:
#!/bin/bash
# deploy.sh - Quick deploy to badge
if [ -z "$BADGE_PORT" ]; then
BADGE_PORT="/dev/tty.usbmodem*"
fi
echo "Deploying to badge..."
mpremote connect $BADGE_PORT cp main.py :main.py
mpremote connect $BADGE_PORT cp config.py :config.py
echo "Deployment complete!"
Make executable:
chmod +x deploy.sh activate.sh
Common Setup Issues
"command not found: python"
macOS/Linux:
# Use python3 instead of python python3 --version # This should work # If python3 also not found, install Python (see Install Python section above) # Optional: Create alias for convenience alias python=python3 alias pip=pip3 # Add to ~/.bashrc or ~/.zshrc to make permanent
Windows:
# Use python instead of python3 python --version # If not found, reinstall Python with "Add to PATH" checked
Important: On macOS/Linux, always use python3 and pip3 (not python and pip).
Python not in PATH
macOS/Linux:
# Add to PATH in ~/.bashrc or ~/.zshrc export PATH="/usr/local/bin:$PATH" export PATH="/opt/homebrew/bin:$PATH" # For M1/M2 Macs # Reload shell source ~/.bashrc # or source ~/.zshrc
Windows:
- •Reinstall Python with "Add to PATH" checked
- •Or manually add to PATH:
- •System Properties → Environment Variables
- •Add
C:\Python311andC:\Python311\Scripts
pip install fails with permissions error
# Don't use sudo! Use virtual environment instead python3 -m venv venv source venv/bin/activate pip install mpremote
Virtual environment activation fails (Windows)
# Enable scripts (run as Administrator) Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # Then activate normally venv\Scripts\Activate.ps1
Badge not detected
macOS:
# Check if driver needed (usually automatic) ls /dev/tty.usb* # Grant permissions sudo chmod 666 /dev/tty.usbmodem*
Linux:
# Add user to dialout group sudo usermod -a -G dialout $USER # Logout and login for changes to take effect # Or use sudo temporarily sudo mpremote connect /dev/ttyACM0
Windows:
- •Install USB driver if needed
- •Check Device Manager for COM port
- •Try different USB ports
mpremote connection fails
# Try explicit port
mpremote connect /dev/tty.usbmodem14201
# List available ports
mpremote connect list
# Auto-detect port (usually works)
mpremote exec "print('Hello')"
# Check if badge is in bootloader mode
# (Hold BOOTSEL button while connecting)
"can't open file" or "No such file" errors
If you see errors like can't open file 'test_connection.py':
# This means the script doesn't exist yet
# Option 1: Use basic verification instead
mpremote exec "print('Badge connected!')"
# Option 2: Create the missing script (see badger-diagnostics skill)
# Option 3: Use direct mpremote commands instead of scripts
mpremote run my_app/__init__.py # Instead of make commands
Common missing files on first setup:
- •
test_connection.py- Usempremote execfor basic testing instead - •
deploy.sh- Use directmpremote cpcommands instead - •Apps/examples - Create them as you go
Don't let missing scripts block you - use the direct mpremote commands shown in CLAUDE.md and skills.
Update Tools
Keep tools updated:
# Activate virtual environment first source venv/bin/activate # Update pip itself pip install --upgrade pip # Update all packages pip install --upgrade mpremote ampy rshell esptool # Or update from requirements.txt pip install -r requirements.txt --upgrade
⚠️ Verify Your Setup
CRITICAL: Always verify your setup is working correctly before starting development.
Complete Verification Checklist
Run through this checklist every time you start a new session:
# 1. Verify Python installation
python3 --version
# Should show: Python 3.8.0 or higher
# 2. Verify virtual environment is activated
which python3
# Should show path to venv/bin/python3 (not system Python)
# 3. Verify tools are installed
mpremote --version
ampy --version
# Both should show version numbers
# 4. Verify badge is connected
ls /dev/tty.usb* # macOS/Linux
# OR
# [System.IO.Ports.SerialPort]::getportnames() # Windows
# 5. Test badge connection
mpremote connect /dev/tty.usbmodem* exec "print('Hello from Badge!')"
# Should print: Hello from Badge!
# 6. Verify badgeware module
mpremote connect /dev/tty.usbmodem* exec "import badgeware; print('badgeware OK')"
# Should print: badgeware OK
Automated Verification Script
Create verify_setup.sh in your project:
#!/bin/bash
# verify_setup.sh - Complete environment verification
echo "=========================================="
echo "Badger 2350 Environment Verification"
echo "=========================================="
errors=0
# Check Python
if command -v python3 &> /dev/null; then
version=$(python3 --version)
echo "✓ Python: $version"
else
echo "✗ Python not found"
((errors++))
fi
# Check virtual environment
if [[ "$VIRTUAL_ENV" != "" ]]; then
echo "✓ Virtual environment: active ($VIRTUAL_ENV)"
else
echo "⚠ Virtual environment: not active"
echo " Run: source venv/bin/activate"
((errors++))
fi
# Check mpremote
if command -v mpremote &> /dev/null; then
echo "✓ mpremote: installed"
else
echo "✗ mpremote: not installed"
echo " Run: pip install mpremote"
((errors++))
fi
# Check badge connection
if mpremote connect list 2>&1 | grep -q "usb"; then
echo "✓ Badge: detected"
# Test REPL
if mpremote exec "print('OK')" 2>&1 | grep -q "OK"; then
echo "✓ Badge REPL: working"
else
echo "✗ Badge REPL: not responding"
((errors++))
fi
# Test badgeware module
if mpremote exec "import badgeware" 2>&1; then
echo "✓ badgeware module: available"
else
echo "✗ badgeware module: not found"
((errors++))
fi
else
echo "✗ Badge: not detected"
echo " Check USB connection"
((errors++))
fi
echo "=========================================="
if [ $errors -eq 0 ]; then
echo "✓ ALL CHECKS PASSED - Ready for development!"
exit 0
else
echo "✗ $errors ERROR(S) FOUND - Fix issues before proceeding"
exit 1
fi
Make executable: chmod +x verify_setup.sh
Run this script before every development session: ./verify_setup.sh
What to Do If Verification Fails
| Issue | Solution |
|---|---|
| Python not found | Reinstall Python, check PATH |
| venv not active | Run source venv/bin/activate |
| Tools not installed | Run pip install -r requirements.txt |
| Badge not detected | Check USB cable, try different port |
| REPL not responding | Restart badge, check for other programs using port |
| badgeware missing | Badge firmware may need reflashing |
Never skip verification - It catches 90% of issues before they become problems.
Best Practices
- •Always verify setup first - Run verification script at start of session
- •Always use virtual environments - Isolate project dependencies
- •Keep requirements.txt updated -
pip freeze > requirements.txt - •Use version control (git) - Track changes
- •Document your setup - Update README.md
- •Test on clean environment - Verify requirements.txt is complete
- •Don't commit venv/ - Add to .gitignore
- •Pin versions - Avoid "works on my machine" issues
Next Steps
After setup is complete:
- •✓ Python installed
- •✓ Virtual environment created
- •✓ Tools installed (mpremote, ampy, etc.)
- •✓ Badge connected and detected
- •✓ Project structure created
Now you're ready to:
- •Flash firmware to badge (see
badger-2350-devskill) - •Create your first app (see
badger-app-creatorskill) - •Connect sensors (see
badger-hardwareskill)
Your development environment is ready! 🎉