The program had no licence file at all, and pyproject claimed MIT into the void. It is now the GNU General Public License, version 3 or later: LICENSE holds the text verbatim, pyproject declares it with the OSI classifier, both .deb builds write /usr/share/doc/<pkg>/copyright in the machine-readable format Policy requires, both manuals carry a COPYING section, and --version prints the GNU notice on both programs. INSTALL.md is the step-by-step: what you need, the Debian package, the virtual environment for everywhere else, how to check it worked, every optional dependency with what it buys and what happens without it, and the errors people actually hit first -- PEP 668 at the top, because on Debian a plain "pip install ." refuses and reads as a broken program. Speech transcription gets its own four steps, because it is the only part with a real download in it: the recogniser into the environment bandsaunter runs from, checking it took, the model (base.en, 148 MB, from Hugging Face into ~/.cache/huggingface, fetched deliberately rather than in the middle of a scan), then turning it on. With the sizes of every model, the offline routes, and what to do when --engines says no although pip says yes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PsWPTweCT6pwxKngvVxcg
55 lines
1.9 KiB
TOML
55 lines
1.9 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=64"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "bandsaunter"
|
|
dynamic = ["version"]
|
|
description = "Signal scanner, recorder and identifier for RTL-SDR receivers"
|
|
readme = "README.md"
|
|
requires-python = ">=3.10"
|
|
license = {text = "GPL-3.0-or-later"}
|
|
classifiers = [
|
|
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
|
|
"Topic :: Communications :: Ham Radio",
|
|
"Environment :: Console",
|
|
]
|
|
dependencies = [
|
|
"numpy>=1.22",
|
|
"scipy>=1.8",
|
|
"rich>=12.0",
|
|
"PyYAML>=5.4",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
plots = ["matplotlib>=3.5"]
|
|
# pyte is a terminal emulator, used by the resize tests to read back what
|
|
# a real terminal would show. Those tests skip without it.
|
|
dev = ["pytest>=7.0", "pyte>=0.8"]
|
|
# Speech recognition for --transcribe. Optional: transcription is off by
|
|
# default, and the scan says so plainly when no recogniser is installed.
|
|
transcribe = ["faster-whisper>=1.0"]
|
|
transcribe-small = ["vosk>=0.3"]
|
|
|
|
# System packages, which pip cannot install. Recorded here so packaging does
|
|
# not have to rediscover them:
|
|
# Depends: librtlsdr0 -- the dongle is unreachable without it
|
|
# Recommends: espeak-ng -- clearer spoken timestamps; a built-in
|
|
# synthesiser is used when absent
|
|
|
|
[project.scripts]
|
|
bandsaunter = "bandsaunter.cli:main"
|
|
saunterbrowse = "bandsaunter.browse:main"
|
|
|
|
[tool.setuptools.dynamic]
|
|
# The displayed version (2026-08-21_01) is not valid PEP 440, so packaging
|
|
# tools are given the converted form. One source of truth, converted at the
|
|
# edge, rather than two version strings that can drift apart.
|
|
version = {attr = "bandsaunter.pep440_version"}
|
|
|
|
[tool.setuptools.packages.find]
|
|
include = ["bandsaunter*"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
filterwarnings = ["ignore::DeprecationWarning"]
|