📦 pip
pip is Python's package manager. It is used to install, update, and remove external Python packages.
📥 Installing a Package
pip install requestsThis downloads and installs the requests package.
After installing:
import requests🔄 Updating a Package
pip install --upgrade requests❌ Uninstalling a Package
pip uninstall requests📋 Checking Installed Packages
pip listTo see information about a specific package:
pip show requests🔍 Checking pip Version
pip --versionFor example:
pip install numpy
pip install pandas<div class="infographic-pypip">
<style>
.infographic-pypip {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
--mono-font: 'IBM Plex Mono', 'SFMono-Regular', Menlo, monospace;
--display-font: 'Fraunces', Georgia, serif;
--body-font: 'Inter', system-ui, sans-serif;
box-sizing: border-box;
max-width: 720px;
margin: 0 auto;
font-family: var(--body-font);
color: var(--ink);
background: var(--paper);
}
.infographic-pypip[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
}
.infographic-pypip *, .infographic-pypip *::before, .infographic-pypip *::after { box-sizing: border-box; }
.infographic-pypip .pp-wrap { padding: 0 clamp(1rem, 4vw, 2rem) 1.5rem; }
.infographic-pypip h1 {
font-family: var(--display-font); font-weight: 600;
font-size: clamp(1.5rem, 5vw, 2.05rem); text-align: center; margin: 1.5rem 0 0.25rem; letter-spacing: -0.01em;
}
.infographic-pypip .pp-sub { text-align: center; color: var(--ink-soft); font-size: 0.86rem; margin: 0 0 1.3rem; }
.infographic-pypip .chip-row { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.4rem; margin-bottom: 0.6rem; min-height: 40px; align-items: center; }
.infographic-pypip .chip {
font-family: var(--mono-font); font-size: 0.78rem; font-weight: 700;
background: var(--accent-soft); border: 1.5px solid var(--accent); color: var(--accent);
padding: 0.3rem 0.6rem; border-radius: 999px; animation: pp-pop 0.25s ease;
}
@keyframes pp-pop { from { opacity: 0; transform: scale(0.7); } to { opacity: 1; transform: scale(1); } }
.infographic-pypip .chip .ver { opacity: 0.7; font-weight: 400; }
.infographic-pypip .len-badge {
display: block; text-align: center; font-family: var(--mono-font); font-size: 0.72rem; color: var(--ink-soft);
margin-bottom: 1.1rem;
}
.infographic-pypip .ctl-row { display: flex; justify-content: center; gap: 0.4rem; margin-bottom: 0.7rem; flex-wrap: wrap; align-items: center; }
.infographic-pypip .ctl-row input {
font-family: var(--mono-font); font-size: 0.82rem; padding: 0.4rem 0.6rem;
border: 1.5px solid var(--line); border-radius: 5px; background: var(--paper-alt); color: var(--ink);
}
.infographic-pypip .ctl-row input:focus { outline: none; border-color: var(--accent); }
#ppNameInput { width: 130px; }
#ppVersionInput { width: 90px; }
.infographic-pypip .cmd-btn {
font: inherit; font-family: var(--mono-font); font-size: 0.78rem; font-weight: 700;
background: var(--accent); color: #fff; border: none; border-radius: 6px;
padding: 0.4rem 0.7rem; cursor: pointer;
}
.infographic-pypip .cmd-btn.secondary { background: var(--paper-alt); color: var(--ink); border: 1.5px solid var(--line); }
.infographic-pypip .quick-row { display: flex; justify-content: center; gap: 0.4rem; margin-bottom: 1rem; flex-wrap: wrap; }
.infographic-pypip .device {
--ed-bg: #1e1e1e; --ed-bar: #2d2d2d; --ed-text: #d4d4d4; --ed-soft: #8a8a8a; --ed-ok: #6fdc8c; --ed-err: #ff6b6b;
background: var(--ed-bg); border: 1px solid var(--line); border-radius: 8px; overflow: hidden;
}
.infographic-pypip .device-bar {
display: flex; align-items: center; gap: 0.4rem;
background: var(--ed-bar); padding: 0.5rem 0.7rem; border-bottom: 1px solid #3a3a3a;
font-size: 0.72rem; color: var(--ed-soft); font-weight: 600;
}
.infographic-pypip .device-bar .dot { width: 9px; height: 9px; border-radius: 50%; background: #5a5a5a; }
.infographic-pypip .device-bar .dot:nth-child(1) { background: #ff5f56; }
.infographic-pypip .device-body { padding: 0.75rem 0.9rem; font-family: var(--mono-font); font-size: 0.78rem; color: var(--ed-text); min-height: 60px; max-height: 220px; overflow-y: auto; }
.infographic-pypip .log-line { line-height: 1.6; opacity: 0; animation: pp-fadein 0.2s ease forwards; }
@keyframes pp-fadein { from { opacity: 0; } to { opacity: 1; } }
.infographic-pypip .log-line.cmd { color: var(--ed-ok); font-weight: 700; margin-top: 0.5rem; }
.infographic-pypip .log-line.cmd:first-child { margin-top: 0; }
.infographic-pypip .log-line.err { color: var(--ed-err); }
.infographic-pypip .log-empty { color: var(--ed-soft); }
.infographic-pypip .reset-row { display: flex; justify-content: center; margin-top: 0.9rem; }
.infographic-pypip .reset-btn {
font: inherit; font-size: 0.78rem; font-weight: 600; color: var(--ink-soft);
background: none; border: 1px solid var(--line); padding: 0.35rem 0.7rem; cursor: pointer; border-radius: 4px;
}
@media (prefers-reduced-motion: reduce) {
.infographic-pypip *, .infographic-pypip *::before, .infographic-pypip *::after {
animation-duration: 0.001ms !important; transition-duration: 0.001ms !important;
}
}
</style>
<div class="pp-wrap">
<h1>pip</h1>
<p class="pp-sub">Python's package installer — pulls code from PyPI into your project.</p>
<div class="chip-row" id="ppChipRow"></div>
<span class="len-badge" id="ppCountBadge">0 packages installed</span>
<div class="ctl-row">
<input id="ppNameInput" type="text" value="requests" placeholder="package" />
<span style="font-family:var(--mono-font); color:var(--ink-soft); font-size:0.8rem;">==</span>
<input id="ppVersionInput" type="text" value="" placeholder="version (optional)" />
</div>
<div class="ctl-row">
<button class="cmd-btn" id="installBtn">pip install</button>
<button class="cmd-btn secondary" id="uninstallBtn">pip uninstall</button>
<button class="cmd-btn secondary" id="showBtn">pip show</button>
</div>
<div class="quick-row">
<button class="cmd-btn secondary" id="listBtn">pip list</button>
<button class="cmd-btn secondary" id="freezeBtn">pip freeze</button>
</div>
<div class="device">
<div class="device-bar"><span class="dot"></span><span class="dot"></span><span class="dot"></span> Terminal</div>
<div class="device-body" id="ppLog"><div class="log-empty">Type a package name and run a command.</div></div>
</div>
<div class="reset-row"><button class="reset-btn" id="ppReset">↺ Clear all packages</button></div>
</div>
<script>
(function () {
var root = document.currentScript.closest('.infographic-pypip')
|| document.querySelector('.infographic-pypip');
var bodyAttr = document.body.getAttribute('data-darkmode');
var dark;
if (bodyAttr === 'true') { dark = true; }
else if (bodyAttr === 'false') { dark = false; }
else {
var match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) root.setAttribute('data-theme', 'dark');
var knownVersions = {
requests: '2.31.0', numpy: '1.26.4', pandas: '2.2.2', flask: '3.0.3',
django: '5.0.6', pytest: '8.2.0', pillow: '10.3.0', 'beautifulsoup4': '4.12.3'
};
function versionFor(name, requested) {
if (requested) return requested;
var key = name.toLowerCase();
return knownVersions[key] || '1.0.0';
}
var installed = []; // { name, version }
var chipRow = root.querySelector('#ppChipRow');
var countBadge = root.querySelector('#ppCountBadge');
var log = root.querySelector('#ppLog');
var nameInput = root.querySelector('#ppNameInput');
var versionInput = root.querySelector('#ppVersionInput');
var firstLog = true;
function findPkg(name) {
var key = name.toLowerCase();
for (var i = 0; i < installed.length; i++) if (installed[i].name.toLowerCase() === key) return i;
return -1;
}
function renderChips() {
chipRow.innerHTML = '';
if (installed.length === 0) {
var empty = document.createElement('span');
empty.style.cssText = 'font-family:var(--mono-font); font-size:0.8rem; color:var(--ink-soft);';
empty.textContent = 'nothing installed yet';
chipRow.appendChild(empty);
} else {
installed.forEach(function (p) {
var chip = document.createElement('span');
chip.className = 'chip';
chip.innerHTML = p.name + ' <span class="ver">' + p.version + '</span>';
chipRow.appendChild(chip);
});
}
countBadge.textContent = installed.length + ' package' + (installed.length === 1 ? '' : 's') + ' installed';
}
function logLine(text, cls) {
if (firstLog) { log.innerHTML = ''; firstLog = false; }
var line = document.createElement('div');
line.className = 'log-line' + (cls ? ' ' + cls : '');
line.textContent = text;
log.appendChild(line);
log.scrollTop = log.scrollHeight;
}
function getName() { return (nameInput.value || '').trim(); }
root.querySelector('#installBtn').addEventListener('click', function () {
var name = getName();
if (!name) return;
var reqVersion = (versionInput.value || '').trim();
var version = versionFor(name, reqVersion);
var cmd = 'pip install ' + name + (reqVersion ? '==' + reqVersion : '');
logLine('$ ' + cmd, 'cmd');
logLine('Collecting ' + name + (reqVersion ? '==' + reqVersion : ''));
logLine('Downloading ' + name + '-' + version + '-py3-none-any.whl');
var idx = findPkg(name);
if (idx !== -1) {
installed[idx].version = version;
logLine('Installing collected packages: ' + name);
logLine('Successfully installed ' + name + '-' + version + ' (replaced previous version)');
} else {
installed.push({ name: name, version: version });
logLine('Installing collected packages: ' + name);
logLine('Successfully installed ' + name + '-' + version);
}
renderChips();
});
root.querySelector('#uninstallBtn').addEventListener('click', function () {
var name = getName();
if (!name) return;
logLine('$ pip uninstall ' + name, 'cmd');
var idx = findPkg(name);
if (idx === -1) {
logLine('WARNING: Skipping ' + name + ' as it is not installed.', 'err');
} else {
logLine('Found existing installation: ' + name + '-' + installed[idx].version);
logLine('Uninstalling ' + name + '-' + installed[idx].version + ':');
logLine(' Successfully uninstalled ' + name + '-' + installed[idx].version);
installed.splice(idx, 1);
}
renderChips();
});
root.querySelector('#showBtn').addEventListener('click', function () {
var name = getName();
if (!name) return;
logLine('$ pip show ' + name, 'cmd');
var idx = findPkg(name);
if (idx === -1) {
logLine('WARNING: Package(s) not found: ' + name, 'err');
} else {
var p = installed[idx];
logLine('Name: ' + p.name);
logLine('Version: ' + p.version);
logLine('Summary: a package installed from PyPI');
logLine('Location: .venv/lib/python3.12/site-packages');
}
});
root.querySelector('#listBtn').addEventListener('click', function () {
logLine('$ pip list', 'cmd');
if (installed.length === 0) {
logLine('(nothing installed)');
} else {
logLine('Package Version');
logLine('---------- -------');
installed.forEach(function (p) { logLine(p.name + ' ' + p.version); });
}
});
root.querySelector('#freezeBtn').addEventListener('click', function () {
logLine('$ pip freeze', 'cmd');
if (installed.length === 0) {
logLine('(nothing installed)');
} else {
installed.forEach(function (p) { logLine(p.name + '==' + p.version); });
}
});
root.querySelector('#ppReset').addEventListener('click', function () {
installed = [];
firstLog = true;
log.innerHTML = '<div class="log-empty">Type a package name and run a command.</div>';
renderChips();
});
renderChips();
})();
</script>
</div>