Minimal Python library to programmatically construct Debian .deb packages
Project description
debx
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 permissionsuid=1000- Set file owner IDgid=1000- Set file group IDmtime=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 and tar archives
(debian-binary, control/, data/) into the specified directory.
Inspecting a Debian Package
The inspect command allows you to view the contents of a .deb package in different formats:
debx inspect package.deb # --format=ls (default)
This will display the contents of the control file and the list of files in the data archive.
You can also specify the format to view the control file in different formats:
debx inspect --format=json package.deb
See the --help option for more details on available formats.
License
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file debx-0.2.2.tar.gz.
File metadata
- Download URL: debx-0.2.2.tar.gz
- Upload date:
- Size: 18.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
346937f2e0ab981689e0211982422a83c3f7deb46197e290a2497736c697cd18
|
|
| MD5 |
e9974514da2ecc1aaf95e1f9e164c634
|
|
| BLAKE2b-256 |
7fe4a78b036b46c67d446bb72a58170e3b6dc5bfe42176bd96fe0f82dfd0fc77
|
File details
Details for the file debx-0.2.2-py3-none-any.whl.
File metadata
- Download URL: debx-0.2.2-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b19071e0afabbe409f7455add7971304413d23c5f25df5eafdec6d1bdb645fe
|
|
| MD5 |
7c1e0f23f231a82ecd72576a2125e0ab
|
|
| BLAKE2b-256 |
6977051a0ca4f0f7f735e7c9988367df13af06ebc509b6080a4261864f867815
|