57 lines
1.4 KiB
Markdown
57 lines
1.4 KiB
Markdown
# Package Management
|
|
|
|
Declare dependencies explicitly, resolve them reproducibly, and isolate environments so projects don't interfere.
|
|
|
|
## Tools by Language
|
|
|
|
| Language | Recommended | Alternatives |
|
|
|---|---|---|
|
|
| Python | `uv` | pip, poetry, pipenv |
|
|
| JavaScript | `pnpm` | npm, yarn |
|
|
| Go | `go mod` | (built-in, no alternative needed) |
|
|
| C++ | `conan`, `vcpkg` | cmake FetchContent |
|
|
|
|
## Python — `uv`
|
|
|
|
Fast resolver with lock files. Drop-in for pip + venv.
|
|
|
|
```bash
|
|
# create venv and install
|
|
uv venv
|
|
uv pip install -e ".[dev]"
|
|
|
|
# add a dependency (updates pyproject.toml + lockfile)
|
|
uv add requests
|
|
|
|
# sync from lock file (reproducible installs)
|
|
uv sync
|
|
```
|
|
|
|
`pyproject.toml` is the single source of truth for dependencies and tool config (PEP 517/518).
|
|
|
|
## JavaScript — `pnpm`
|
|
|
|
Faster and more disk-efficient than npm; compatible with npm ecosystem.
|
|
|
|
```bash
|
|
pnpm install # install from lockfile
|
|
pnpm add lodash # add dependency
|
|
pnpm dlx create-vite # run one-off tool
|
|
```
|
|
|
|
## Go — `go mod`
|
|
|
|
Built into the toolchain; no extra install needed.
|
|
|
|
```bash
|
|
go mod init github.com/you/myproject
|
|
go get github.com/some/package@v1.2.3
|
|
go mod tidy # remove unused deps
|
|
```
|
|
|
|
## Key Principles
|
|
|
|
- Always commit the lock file (`uv.lock`, `pnpm-lock.yaml`, `go.sum`)
|
|
- Pin to a specific version in production; use ranges only in libraries
|
|
- Separate dev dependencies from runtime dependencies
|