C.W.K.
Stream
Lesson 01 of 05 · published

Why pip Is Both Universal and Frustrating

~11 min · pip, overview, python

Level 0Newbie
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

pip is the official, default Python package installer. It ships with every Python 3.4+ install. It talks to PyPI (the Python Package Index), which hosts more than 500,000 packages. Every Python tutorial assumes pip exists; every requirements.txt file is read by pip; every newer Python tool (uv, poetry, pixi) ultimately interoperates with the pip ecosystem. You cannot avoid pip in Python — you can only learn it well.

pip is also frustrating in well-known ways. It has no lockfile by defaultrequirements.txt is just a flat list of packages with optional version constraints, not a true lock of the entire transitive dependency tree. It's slow — installing a sizable scientific Python project can take minutes. It has no built-in Python version management — you need pyenv or similar separately. Its uninstalls are dirty — removing a package leaves its transitive deps installed. It has no global tool runner — you need pipx separately for the npx-style workflow.

Modern Python development typically chains four tools to compensate: pip + venv + pip-tools (or pip-compile) + pyenv + pipx. The next track in this quest, uv, replaces all five with a single Rust binary that's 10-100x faster. But the day you have to install that one Python tool that doesn't yet support uv, you're back to pip — so learn pip first, even if your daily driver becomes uv.

Code

What pip does — and what it doesn't·text
  pip DOES                              pip DOES NOT
  -----------                            ----------------
  Install from PyPI                      Manage Python versions (use pyenv)
  Read requirements.txt                  Generate true lockfiles (use pip-tools)
  Editable installs (-e)                 Run tools without installing (use pipx)
  Resolve dependencies                   Cleanly uninstall transitive deps
  Local wheel/sdist installs             Project-local environments (use venv)
  Index-url overrides                    Build environments (use venv + invocation)

  Modern stack:  pip + venv + pip-tools + pyenv + pipx
  Or just:       uv  (next track)

External links

Exercise

Run 'pip --version' and 'python3 --version'. If you don't have Python installed, install it via Homebrew ('brew install python@3.13'). Note the Python version, the pip version, and where they live ('which python3', 'which pip3'). The path tells you which Python you're using — there can be more than one.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.