Page 1 of 8~104 min topic

Python virtual environments

Frame the project virtualenv experiment

Page 1 sets a falsifiable claim for the isolated project venv with pinned pandas before any implementation work begins.

~13 min this pageExperiment brief

1Try it yourself

Playground

Env conflict

Two projects need different package versions. A global install can’t please both.

Project A needs requests==2.28
Project B needs requests==2.32
Global install: requests==2.32 ← A breaks

2Learn the idea

Read

Name the deliverable and claim

Success is not “I followed the tutorial.” Success is producing evidence that: activated venv imports pandas at a recorded version while a second project stays untouched. The accepted input is narrow on purpose: Python 3.x, project directory, and a requirements snippet. That narrowness is what lets you inspect every field and prevents a toy demo from being narrated as a production system.

Record the baseline you must beat: record global site-packages pandas version (or absence) before creating the venv. If the finished artifact cannot beat that baseline on the fixture below, stop and revise the claim before writing more code.

Read

Inventory the fixture

printf 'pandas==2.2.2\n' > requirements.txt
python3 -c "print({'project':'lab-env','pin':'pandas==2.2.2'})"

Expected evidence: project pin recorded. Treat the printout as a claim about this fixture, not as proof that the toolchain merely started.

Read

Spot misleading success early

For the isolated project venv with pinned pandas, a decorative win often looks like a clean run that never checks which python points inside .venv; importlib.metadata.version('pandas') matches pin. Write the metric down now so later pages cannot redefine success after the fact. Also note the operational threat you will eventually gate on: pip installing from an unpinned URL or committing .venv with credentials.

Read

Lab notebook: claim before code

For python-virtual-environments, write the claim on a sticky note in this exact shape: “Given Python 3.x, project directory, and a requirements snippet, the project virtualenv will …”. Fill the ellipsis with the observable part of: activated venv imports pandas at a recorded version while a second project stays untouched. Tape the baseline beside it: record global site-packages pandas version (or absence) before creating the venv. If someone later replaces your metric with a vibe check, the sticky note is how you push back.

Also sketch the one-sentence user story: a person uses this output to install project packages without mutating the global interpreter. If that sentence needs a dashboard, a model zoo, or five services, the lab scope is too wide—shrink the fixture (project dir lab-env/ with requirements.txt containing pandas==2.2.2) until the story fits on one screen.

Read

Worked judgment

Decide now whether live network calls are allowed on page 1. For this lab they usually are not; inventory and contracts should run offline against project dir lab-env/ with requirements.txt containing pandas==2.2.2. Note the metric you will eventually require (which python points inside .venv; importlib.metadata.version('pandas') matches pin) so page 4 cannot invent a softer target. The characteristic failure to keep in mind is pip installing into the system Python, or activating the wrong venv.

Read

Why this stage matters for the project virtualenv

At the experiment brief stage for python-virtual-environments, the job is narrower than finishing a product demo. You are creating one progressive evidence piece about project dir lab-env/ with requirements.txt containing pandas==2.2.2 that later pages inherit without redefining success. Keep that fixture small enough to inspect by hand, keep outputs copy-pasteable as text, and refuse to narrate this baseline as if it were a production SLA: record global site-packages pandas version (or absence) before creating the venv.

For this page specifically, success looks like a falsifiable claim and baseline written before coding while still centering the user decision to install project packages without mutating the global interpreter. If you cannot point to a file, command, or assertion that proves that for the project virtualenv, stay on this page instead of advancing.

Set up a virtual environment

Next

Go deeper

Before you start

Why this matters

On paper, write the user decision this lab supports: install project packages without mutating the global interpreter. Then write one sentence naming what could look successful while actually being wrong for this claim—focus on pip installing into the system Python, or activating the wrong venv. Keep both sentences beside the fixture inventory you run next.

In the wild

See how this idea shows up as a product and a company — then come back to the lesson. Skills transfer across vendors.

Check your understanding

Page assessment

Answer from memory. Completion is saved from this evidence, not from opening the next page.

1. What exact claim can this fixture disprove?
2. Which baseline prevents a decorative success story?
3. What result would make you stop before implementation?
4. Did you name the metric (which python points inside .venv) up front?

All responses are required.