Documentation Index Fetch the complete documentation index at: https://mintlify.com/pyinfra-dev/pyinfra/llms.txt
Use this file to discover all available pages before exploring further.
The apk module manages packages on Alpine Linux systems using the apk package manager.
Functions
packages
Install, remove, or update apk packages.
from pyinfra.operations import apk
apk.packages(
name = "Install web utilities" ,
packages = [ "nginx" , "curl" ],
update = True ,
)
List of packages to ensure.
Whether the packages should be installed.
Whether to upgrade packages without a specified version.
Run apk update before installing packages.
Run apk upgrade before installing packages.
Package versions can be pinned like apk: <pkg>=<version>
Examples
Basic Installation
Latest Versions
With Upgrade
from pyinfra.operations import apk
# Update package list and install packages
apk.packages(
name = "Install Asterisk and Vim" ,
packages = [ "asterisk" , "vim" ],
update = True ,
)
update
Update apk package indexes.
from pyinfra.operations import apk
apk.update(
name = "Update apk repositories" ,
)
This operation is not idempotent - it will always execute.
upgrade
Upgrade all apk packages.
from pyinfra.operations import apk
apk.upgrade(
name = "Upgrade all packages" ,
available = True ,
)
Force all packages to be upgraded (recommended on whole Alpine version upgrades).
This operation is not idempotent - it will always execute.
Common Use Cases
Basic System Setup
from pyinfra.operations import apk
# Update repositories
apk.update(
name = "Update package repositories" ,
)
# Install essential packages
apk.packages(
name = "Install essential tools" ,
packages = [
"bash" ,
"curl" ,
"wget" ,
"git" ,
"vim" ,
],
)
Container Base Image Setup
from pyinfra.operations import apk
# Minimal installation for containers
apk.packages(
name = "Install runtime dependencies" ,
packages = [
"ca-certificates" ,
"tzdata" ,
],
update = True ,
)
Development Environment
from pyinfra.operations import apk
# Install build tools
apk.packages(
name = "Install build dependencies" ,
packages = [
"build-base" ,
"gcc" ,
"g++" ,
"make" ,
"cmake" ,
],
update = True ,
)
# Install development tools
apk.packages(
name = "Install development tools" ,
packages = [
"git" ,
"vim" ,
"bash" ,
"curl" ,
],
)
Python Development
from pyinfra.operations import apk
# Install Python and dependencies
apk.packages(
name = "Install Python development environment" ,
packages = [
"python3" ,
"python3-dev" ,
"py3-pip" ,
"py3-virtualenv" ,
],
update = True ,
)
System Upgrade
from pyinfra.operations import apk
# Update repositories
apk.update(
name = "Update repositories" ,
)
# Upgrade all packages
apk.upgrade(
name = "Upgrade all packages" ,
available = True ,
)
Alpine-Specific Tips
Alpine supports virtual packages for build dependencies that can be easily removed: from pyinfra.operations import apk
# Install build dependencies as virtual package
apk.packages(
name = "Install build dependencies" ,
packages = [ ".build-deps" , "gcc" , "musl-dev" ],
)
# Later, remove all build dependencies
apk.packages(
name = "Remove build dependencies" ,
packages = [ ".build-deps" ],
present = False ,
)
For latest packages, you may need to use the edge repository: from pyinfra.operations import server
# Add edge repository
server.shell(
name = "Enable edge repository" ,
commands = [
'echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories' ,
'echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories' ,
],
)
For minimal container images, use —no-cache: from pyinfra.operations import server
server.shell(
name = "Install without cache" ,
commands = [ "apk add --no-cache nginx" ],
)