Day 1 — Installation Guide#
Goal: Get a fully working development environment — terminal, editor, Git, Python, and
uv— so you can start coding from Day 2 onwards with zero friction.
What You Need Installed by the End#
| Tool | Purpose | Verify with |
|---|---|---|
| Ubuntu Linux (native or WSL2) | Your operating system / shell environment | uname -a |
| VS Code | Code editor | code --version |
| Git | Version control | git --version |
| Python 3.11+ | Programming language | python3 --version |
| uv | Python package/project manager | uv --version |
Option A — Native Ubuntu Linux#
If you are already running Ubuntu (22.04 or later), you just need to install the tools.
Step 1: Update your system#
sudo apt update && sudo apt upgrade -yStep 2: Install Git#
sudo apt install git -y
git --version
# git version 2.x.xStep 3: Install Python#
Ubuntu comes with Python, but let’s make sure you have a recent version:
python3 --version
# If below 3.11, install a newer one:
sudo apt install python3.12 -yStep 4: Install VS Code#
# Download from https://code.visualstudio.com/
# Or install via snap:
sudo snap install code --classic
code --versionStep 5: Install uv#
uv is a blazing-fast Python package manager that replaces pip, venv, and more.
curl -LsSf https://astral.sh/uv/install.sh | sh
# Restart your terminal, then:
uv --versionWhat is
uv? Think of it as a single tool that does whatpip,venv,pyenv, andpipxdo — but 10–100x faster. It was built by the same team that maderuff(the fast Python linter).
🧠 Knowledge Check#
Q1: What command combines updating the package list and upgrading installed packages in Ubuntu?
- A)
sudo apt install update - B)
sudo apt update && sudo apt upgrade -y - C)
apt update --all - D)
sudo snap install code
Answer
B — sudo apt update fetches the latest package lists, and sudo apt upgrade -y installs the updates without asking for confirmation.
Q2: Why do we use uv instead of traditional pip?
- A) Because
uvis built into Ubuntu natively - B) Because
pipis deprecated and no longer supported - C) Because
uvis 10-100x faster and replaces multiple tools like pip, venv, and pyenv - D) Because
uvworks without Python
Answer
C — uv is a blazing-fast, all-in-one replacement for Python dependency and environment management.
Option B — Windows + WSL2 (Ubuntu)#
If you are on Windows, you will install Linux inside Windows using WSL2.
Step 1: Enable WSL2#
Open PowerShell as Administrator and run:
wsl --installThis installs WSL2 + Ubuntu. Restart your computer when prompted.
Step 2: Set up Ubuntu#
After restart, Ubuntu will open automatically and ask you to create a username and password. This is your Linux username — it can be different from your Windows username.
# Verify you are in WSL2:
uname -a
# Should contain "Linux" and "microsoft" in the outputStep 3: Update Ubuntu inside WSL#
sudo apt update && sudo apt upgrade -yStep 4: Install Git#
sudo apt install git -y
git --versionStep 5: Install Python#
python3 --version
# Should be 3.10+ on Ubuntu 22.04/24.04Step 6: Install VS Code (on Windows side)#
- Download VS Code from code.visualstudio.com
- Install it on Windows (not inside WSL)
- Install the “WSL” extension inside VS Code
- Now open VS Code from your WSL terminal:
code .
# This opens VS Code connected to WSL — you will see "WSL: Ubuntu" in the bottom-leftStep 7: Install uv (inside WSL)#
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
# Close and reopen terminal
uv --version🧠 Knowledge Check#
Q1: What does the command wsl --install do when run in PowerShell?
- A) It installs a new version of Windows PowerShell
- B) It installs WSL2 and sets up a default Linux distribution (Ubuntu)
- C) It installs VS Code
- D) It updates Windows
Answer
B — It enables the Windows Subsystem for Linux (WSL) and installs Ubuntu automatically.
Q2: When using WSL2, where should VS Code be installed?
- A) Only inside the WSL terminal
- B) On both Windows and inside WSL separately
- C) On the Windows side, but with the “WSL” extension installed
- D) It doesn’t matter
Answer
C — You install VS Code on Windows and use the WSL extension to connect it seamlessly to your Linux environment.
Verification Checklist#
Run each of these commands. If any fail, go back and fix that step.
# 1. Check you are on Linux
uname -a
# Expected: ... Linux ... (if WSL, you'll also see "microsoft")
# 2. Git
git --version
# Expected: git version 2.x.x
# 3. Python
python3 --version
# Expected: Python 3.11.x or higher
# 4. uv
uv --version
# Expected: uv 0.x.x
# 5. VS Code (run from terminal)
code --version
# Expected: version number + commit hashIf all five work, you are ready for Day 2.
Troubleshooting#
"wsl --install" does nothing or fails
- Make sure you are running PowerShell as Administrator (right-click → Run as administrator).
- On older Windows 10 builds, you may need to enable WSL manually:Then restart and run
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartwsl --install -d Ubuntu. - Requires Windows 10 version 2004+ or Windows 11.
"code" command not found in WSL
- Make sure VS Code is installed on the Windows side (not inside WSL).
- Install the WSL extension in VS Code.
- Try closing and reopening your WSL terminal.
- If still not found, add VS Code to your PATH:
export PATH="$PATH:/mnt/c/Users/$USER/AppData/Local/Programs/Microsoft VS Code/bin"
"uv" command not found after install
The installer adds uv to ~/.local/bin/. This directory may not be in your PATH.
# Add to PATH (paste into terminal):
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Now try again:
uv --versionPython version is too old (below 3.11)
Use uv itself to install a newer Python:
uv python install 3.13
uv python list
# You should see 3.13 in the listYou can also install from the deadsnakes PPA:
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install python3.12 -yQ&A#
Q: Do I need to install Python separately if I have uv?
A: uv can manage Python versions for you (uv python install 3.13), but having a system Python is still useful for quick one-off scripts. It’s good to have both.
Q: Should I use the Windows Terminal or the built-in Ubuntu terminal?
A: Use Windows Terminal — it supports tabs, better fonts, and you can have PowerShell and Ubuntu side by side. Install it from the Microsoft Store if you don’t have it.
Q: Can I use macOS instead of Linux/WSL?
A: Yes. macOS is Unix-based, so most commands work the same. Use brew (Homebrew) instead of apt for installing packages. The main TDS course assumes Linux, but macOS is very close.
Q: What is the difference between pip and uv?
A: pip is the traditional Python package installer. uv is a modern replacement that:
- Installs packages 10-100x faster
- Creates virtual environments automatically
- Manages Python versions
- Handles project setup (
pyproject.toml) - Works as a drop-in replacement:
uv pip installworks just likepip install
Exercises#
Exercise 1: Screenshot your verification
Run the five verification commands above. Save the output to a file:
{
echo "=== uname ==="
uname -a
echo "=== git ==="
git --version
echo "=== python ==="
python3 --version
echo "=== uv ==="
uv --version
echo "=== vscode ==="
code --version
} > ~/environment-check.txt
cat ~/environment-check.txtExpected output (click to check)
=== uname ===
Linux your-machine 5.15.x-x-x ... GNU/Linux
=== git ===
git version 2.43.0
=== python ===
Python 3.12.3
=== uv ===
uv 0.7.x
=== vscode ===
1.96.x
abc123...
x64Your version numbers will differ, but all five sections should show a version (no errors).
Exercise 2: Configure Git identity
Git needs to know who you are before you can make commits:
git config --global user.name "Your Full Name"
git config --global user.email "[email protected]"Verify:
git config --global --listWhat should I see?
user.name=Your Full Name
[email protected]This is stored in ~/.gitconfig. You only need to do this once per machine.
Exercise 3: Create your bootcamp workspace
mkdir -p ~/tds/bootcamp/day-1
cd ~/tds/bootcamp/day-1
pwdWhat does `pwd` show?
/home/yourname/tds/bootcamp/day-1This confirms you created the directory and navigated into it successfully.