Skip to main content

Minimal Python library to programmatically construct Debian .deb packages

Project description

debx

Coverage Status tests PyPI - Version PyPI - Types PyPI - License

Pronounced "deb-ex", debx is a Python library for creating, reading, and manipulating Debian package files. This pacage includes the debx command-line tool for packing and unpacking and inspecting any .deb packages.

Features

  • Read and extract content from Debian packages
  • Create custom Debian packages programmatically
  • Parse and manipulate Debian control files (RFC822-style format)
  • Low-level AR archive manipulation
  • No external dependencies - uses only Python standard library
  • Command-line interface for creating and unpacking .deb packages

Installation

pip install debx

Quick Start

Reading a Debian Package

from debx import DebReader

# Open a .deb file
with open("package.deb", "rb") as f:
    reader = DebReader(f)

    # Extract control file
    control_file = reader.control.extractfile("control")
    control_content = control_file.read().decode("utf-8")
    print(control_content)
    
    # List files in the data archive
    print(reader.data.getnames())
    
    # Extract a file from the data archive
    file_data = reader.data.extractfile("usr/bin/example").read()

Creating a Debian Package

from debx import DebBuilder, Deb822

# Initialize the builder
builder = DebBuilder()

# Create control information
control = Deb822({
    "Package": "example",
    "Version": "1.0.0",
    "Architecture": "all",
    "Maintainer": "Example Maintainer <maintainer@example.com>",
    "Description": "Example package\n This is an example package created with debx.",
    "Section": "utils",
    "Priority": "optional"
})

# Add control file
builder.add_control_entry("control", control.dump())

# Add files to the package
builder.add_data_entry(b"#!/bin/sh\necho 'Hello, world!'\n", "/usr/bin/example", mode=0o755)

# Add a symlink
builder.add_data_entry(b"", "/usr/bin/example-link", symlink_to="/usr/bin/example")

# Build the package
with open("example.deb", "wb") as f:
    f.write(builder.pack())

Working with Debian Control Files

from debx import Deb822

# Parse a control file
control = Deb822.parse("""
Package: example
Version: 1.0.0
Description: Example package
 This is a multi-line description
 with several paragraphs.
""")

print(control["Package"])  # "example"
print(control["Description"])  # Contains the full multi-line description

# Modify a field
control["Version"] = "1.0.1"

# Add a new field
control["Priority"] = "optional"

# Write back to string
print(control.dump())

Command-Line Interface

debx includes a command-line interface for packing and unpacking Debian packages.

Packing a Debian Package

The pack command allows you to create a .deb package from files on your system:

debx pack \
    --control control:control \
              preinst:preinst:mode=0755 \
    --data src/binary:/usr/bin/example:mode=0755 \
           src/config:/etc/example/config \
           src/directory:/opt/example \
    --output example.deb

The format for specifying files is:

source_path:destination_path[:modifiers]

Available modifiers:

  • mode=0755 - Set file permissions
  • uid=1000 - Set file owner ID
  • gid=1000 - Set file group ID
  • mtime=1234567890 - Set file modification time

When specifying a directory, all files within that directory will be included in the package while preserving the directory structure.

Unpacking a Debian Package

The unpack command extracts a .deb package into a directory:

debx unpack package.deb --directory output_dir

This will extract the internal AR archive members (debian-binary, control.tar.gz, data.tar.*) to the specified directory.

License

MIT License

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

debx-0.2.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

debx-0.2.0-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

Details for the file debx-0.2.0.tar.gz.

File metadata

  • Download URL: debx-0.2.0.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.25

File hashes

Hashes for debx-0.2.0.tar.gz
Algorithm Hash digest
SHA256 94e7a397054867ae081ec6523fdfd1ebc1b2fa018e63ade7d66aa78c2819c6fa
MD5 fe311375b302e8d204b5d78ffea7b0bc
BLAKE2b-256 3cc69d593f1acbd1ec838d0568d853b40696d402467e8bccea2fbf3f6aab7859

See more details on using hashes here.

File details

Details for the file debx-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: debx-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.25

File hashes

Hashes for debx-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1fd997bebf5ea8c6479fbd6ac64c240f75725b57efc77296494876c83893ceb3
MD5 9c8c6bc9aef94e004cf0ca7d47732136
BLAKE2b-256 41fee0810f4fddd41b3412b84c9b51e246c58fc807ded9abadd14ce3d448686b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page