pyhosts
Manage system hosts files (
/etc/hosts) the Pythonic way.
- Platform independent — Linux, macOS, Windows
- Zero dependencies — uses Python standard library only
- Type-safe — full type hints,
py.typed, strict mypy - Immutable models — frozen dataclasses for safety
- List-like API — implements
MutableSequenceprotocol - Lazy loading — file is read only when accessed
Installation
pip install pyhosts
Quick Start
from pyhosts import Hosts
# Load the system hosts file
hosts = Hosts()
# Iterate over entries
for host in hosts:
print(f"{host.ip_address} {host.hostname}")
# Attribute-style access
localhost = hosts.localhost
print(localhost.ip_address) # IPv4Address('127.0.0.1')
# Check membership
if "localhost" in hosts:
print("found!")
Usage
Search
# Find all entries matching IP, hostname, or alias
results = hosts.find("192.168.1.1")
results = hosts.find("localhost")
# Find first match
host = hosts.find_one("localhost")
Add and Remove
from pyhosts import Host
from ipaddress import ip_address
# Create a new entry
entry = Host(
ip_address=ip_address("192.168.1.100"),
hostname="myserver",
aliases=("server", "web"),
comment="Production server",
)
# Add it
hosts.add(entry)
# Remove by query
count = hosts.remove("myserver")
Save
# Save changes to disk
hosts.save()
# Save with automatic backup
hosts.save(backup=True)
List-style Access
# Index, slice, len, in — it's a MutableSequence
first = hosts[0]
total = len(hosts)
hosts[0] = new_entry
del hosts[2]
API Reference
Hosts
The main class for managing the hosts file.
| Method | Description |
|---|---|
load() |
Load entries from hosts file |
save(backup=False, write_header=True) |
Save entries to hosts file |
find(query) |
Find all entries matching query (IP, hostname, or alias) |
find_one(query) |
Find first matching entry |
add(host, allow_duplicates=False) |
Add a new entry |
remove(query) |
Remove all entries matching query, returns count |
Supports full MutableSequence interface: indexing, slicing, iteration, len(), in, del.
Note:
Hostsis not thread-safe. Use external synchronisation (e.g.threading.Lock) when sharing an instance across threads.
Host
Immutable (frozen) dataclass representing a single hosts file entry.
| Attribute | Type | Description |
|---|---|---|
ip_address |
IPv4Address | IPv6Address |
IP address |
hostname |
str |
Primary hostname |
aliases |
tuple[str, ...] |
Alias hostnames |
comment |
str | None |
Inline comment |
| Method | Description |
|---|---|
Host.from_line(line) |
Parse a hosts file line |
to_line() |
Format as hosts file line |
matches(query) |
Check if entry matches query |
all_names |
Property: hostname + aliases |
Exceptions
| Exception | Description |
|---|---|
DuplicateEntryError |
Raised when adding a duplicate entry |
PlatformNotSupportedError |
Raised on unsupported platforms |
Requirements
- Python 3.10+
- No external dependencies
Development
# Clone and install
git clone https://github.com/igormilovanovic/pyhosts.git
cd pyhosts
pip install -e .
pip install -r test-requirements.txt
# Run tests
pytest test/ -v
# Run tests with coverage
pytest test/ -v --cov=pyhosts
# Lint
pycodestyle pyhosts/ --max-line-length=120
License
Metadata
Release files for pyhosts 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyhosts-0.3.1.tar.gz | 17.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyhosts-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.9 kB
Release files / pyhosts-0.3.1.tar.gz
| Download URL | pyhosts-0.3.1.tar.gz |
|---|---|
| Size | 17.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
25fdec2e4ba33ad52bc446749776dfa748be74e60f66c07bdef139e59d3e5c00
|
|
BLAKE2b-256 checksum How to use checksums |
05a229ca6ff92fd7f0cd73a6aadf9bf306973b34b90c9dc980a1477b566fc277
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 25, 2026.
Transparency logRelease files / pyhosts-0.3.1-py3-none-any.whl
| Download URL | pyhosts-0.3.1-py3-none-any.whl |
|---|---|
| Size | 11.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ae25dea7b111daab48201a85d06452f7b4f2399ed27aee4607defbf6c45e8caa
|
|
BLAKE2b-256 checksum How to use checksums |
37d3155e41793895c730fc4e30707da87d089baa431204d3abe64fcf16852422
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 25, 2026.
Transparency log