Skip to main content

pygpsd

CI PyPI version Python versions License: MIT

A tiny, typed Python client for talking to gpsd. Connect via plain TCP to your running gpsd instance (usually localhost:2947) and get structured GPS data back.

Installation

Pick your favorite tool:

Using uv (recommended):

# In an existing project
uv add pygpsd

# Or standalone with a venv
uv venv && source .venv/bin/activate
uv pip install pygpsd

Using pip:

pip install pygpsd

Works with Python 3.8+.

Quick Start

from pygpsd import GPSD, GPSInactiveWarning, NoGPSDeviceFoundException

try:
    gpsd = GPSD()  # Connects to localhost:2947
    data = gpsd.poll()
except NoGPSDeviceFoundException:
    print("No GPS device found")
except GPSInactiveWarning:
    print("GPS found but no fix yet")
else:
    # You've got typed GPS data!
    print(f"Mode: {data.mode}")
    print(f"Time: {data.time}")
    print(f"Satellites: {len(data.get_used_satellites())}/{data.get_satellite_count()}")
    print(f"Position: {data.geo.position.lat}, {data.geo.position.lon}")

What You Get

Main class:

  • GPSD(host="127.0.0.1", port=2947) — connects and starts watching

Get data:

  • gpsd.poll() → returns a Data object with everything

Exceptions to catch:

  • NoGPSDeviceFoundException — gpsd says no hardware found
  • GPSInactiveWarning — hardware exists but no fix
  • UnexpectedMessageException — something weird from gpsd

Inside the Data object:

  • mode (Fix type), time (datetime), leap_seconds (int)
  • satellites (list with signal strength, PRN, usage, etc.)
  • geo (lat/lon/alt and more) and ecef (3D cartesian coords)
  • Helpers: get_used_satellites(), get_satellite_count()

Developing

Want to hack on pygpsd? Here's the quick setup:

# Clone and create venv
uv venv
source .venv/bin/activate  # or .venv\Scripts\activate on Windows

# Install in editable mode
uv pip install -e .

# Quick test
python -c "from pygpsd import GPSD; print(GPSD().poll())"

This project uses standard Python packaging (PEP 621, Hatchling backend) with a uv.lock for reproducible installs.

Code Quality

The project uses pylint to check for code quality issues, including duplicate code detection:

# Install development dependencies
uv pip install pylint

# Run pylint on the entire project
pylint pygpsd/ tests/ --rcfile=.pylintrc

# Check only for duplicate code
pylint pygpsd/ tests/ --rcfile=.pylintrc --disable=all --enable=duplicate-code,similarities

Pylint runs automatically in CI/CD on every push and pull request.

Requirements

  • A running gpsd daemon on port 2947 (or wherever you point it)
  • Python 3.10 or newer

License

MIT License. See LICENSE for details.

Metadata

Release files for pygpsd 1.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pygpsd 1.3.0
File Size Uploaded
pygpsd-1.3.0.tar.gz 37.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pygpsd 1.3.0
File Interpreter ABI Platform
pygpsd-1.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 48.6 kB

Release files / pygpsd-1.3.0.tar.gz

Download URL pygpsd-1.3.0.tar.gz
Size 37.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b16a8ecbd885ef13670aab80d0a4765b66b87f44fb6c218211b98cd8e6217a03
BLAKE2b-256 checksum
How to use checksums
2a8b884925289ee7cb547b235ded22e69e1b55f7617c0df1d823861291bfdafc
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 Nov 1, 2025.

Transparency log

Release files / pygpsd-1.3.0-py3-none-any.whl

Download URL pygpsd-1.3.0-py3-none-any.whl
Size 10.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
36f91a8d09d4e4749d7719c9d06bba939dc4919e29c6a206f77a9d5d6da5a033
BLAKE2b-256 checksum
How to use checksums
c73b77a69438014bb2faa700e0e093e48fb2abe687dc249e5cc31c2fa228ae69
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 Nov 1, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.3.0 This release

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.4

2 release files

1.1.2

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.1

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page