Apollo Cyber RT Python bindings packaged from the core repository.
Project description
Core
Core is a fork of Apollo cyber, a publish-subscribe system used as middleware for autonomous driving.
Benchmark
Latency of publish and subscribe messages.
How to build
- Deploy build env.
sudo bash scripts/deploy/build.sh
- Run the build script.
bash scripts/build.sh
For a narrower pycyber-focused build/test loop, use the existing Bazel targets directly:
bazel test --color=no --curses=no \
//cyber/python/internal:py_cyber_test \
//cyber/python/internal:py_record_test \
//cyber/python/cyber_py3/test:init_test \
//cyber/python/cyber_py3/test:cyber_test \
//cyber/python/cyber_py3/test:cyber_time_test \
//cyber/python/cyber_py3/test:record_test
Example
-
Set Environment Variable
source scripts/env/runtime.bash
-
Run the Publisher and Subscriber
- In the first terminal, run
./bazel-bin/cyber/examples/listenerto start the subscriber program. - In the second terminal, run
./bazel-bin/cyber/examples/talkerto start the publisher program.
- In the first terminal, run
-
Check the log in
data/log
Build the pycyber wheel
Recommended: use the included one-step packaging script which stages, builds, repairs and validates the wheel. Always run packaging inside an isolated Python environment (venv) or a clean container to avoid dependency conflicts.
Quick start (recommended)
- Create and activate a virtual environment (venv):
python3 -m venv .packaging-venv
source .packaging-venv/bin/activate
python -m pip install --upgrade pip
pip install build auditwheel twine setuptools_scm
# On Linux, also install patchelf
sudo apt-get update && sudo apt-get install -y patchelf
- Run the one-step packaging script. The script will use PYCYBER_VERSION if set, otherwise it reads the most recent tag matching
pycyber-v*:
# Preferred: use tag-derived version (make and push a tag first)
./scripts/release/build_and_package_pycyber.sh
# Or override version explicitly:
PYCYBER_VERSION=0.0.7 ./scripts/release/build_and_package_pycyber.sh
Artifacts and checks:
- Artifacts are written to
packaging/pycyber/wheelhouse/. - The script runs
twine checkand the repository'svalidate_pycyber.pysmoke test. - A
SHA256SUMSfile is created in the wheelhouse.
Script flags:
--skip-auditwheel: Skipauditwheelrepair (useful on non-Linux machines).--skip-validate: Skip running the smoke validation.--skip-sdist: Only build wheel, skip sdist.--skip-build: Skip staging (build_pycyber.py), useful if staging already exists.--outdir DIR: Write artifacts to a custom directory.
Manual (step-by-step) packaging
If you prefer to run the steps manually, follow these commands (run inside a clean venv / container):
- Stage the package from Bazel outputs:
python3 scripts/release/build_pycyber.py
- Build sdist + wheel:
python3 -m build --sdist --wheel --outdir packaging/pycyber/dist packaging/pycyber
- Repair Linux wheels (auditwheel):
auditwheel repair packaging/pycyber/dist/*.whl -w packaging/pycyber/wheelhouse
- Check metadata and run validation:
python3 -m twine check packaging/pycyber/wheelhouse/*
python3 scripts/release/validate_pycyber.py --wheel packaging/pycyber/wheelhouse/*.whl
- Upload to TestPyPI (recommended first):
TWINE_USERNAME=__token__ TWINE_PASSWORD=$TEST_PYPI_TOKEN \
python -m twine upload --repository testpypi packaging/pycyber/wheelhouse/*
# Test install from TestPyPI in a fresh venv:
pip install --index-url https://test.pypi.org/simple/ --no-deps pycyber==0.0.7
- Final upload to PyPI:
TWINE_USERNAME=__token__ TWINE_PASSWORD=$PYPI_TOKEN \
python -m twine upload packaging/pycyber/wheelhouse/*
Versioning
pyproject.tomlis configured to usesetuptools_scmwith the tag pattern^pycyber-v(?P<version>.+)$.- Preferred release flow: create an annotated tag on the release commit and push it:
git tag -a pycyber-v1.2.3 -m "Release 1.2.3"
git push origin --tags
- The one-step script will extract the version from the tag automatically. If needed, override with
PYCYBER_VERSION.
Troubleshooting
- pip dependency conflicts (for example:
streamlitvsprotobuf) occur when build tools are installed into the global Python environment. Always use a clean virtualenv (venv) or container for packaging. - For reproducible manylinux wheels and multi-Python builds, use
cibuildwheelor the official manylinux Docker images: https://github.com/pypa/manylinux
Security and best practices
- Use PyPI API tokens (username
__token__) with minimal scope; store tokens as secrets in CI. - Upload to TestPyPI first to verify installation before publishing to the real PyPI.
- Tag releases and attach built artifacts and
SHA256SUMSto GitHub Releases. - Optionally GPG-sign artifacts for extra authenticity.
CI
- The repository includes
.github/workflows/release-pycyber.ymlwhich is triggered by tagspycyber-v*. The workflow checks out the full history (fetch-depth: 0) sosetuptools_scmcan compute versions correctly.
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 pycyber-0.0.7.tar.gz.
File metadata
- Download URL: pycyber-0.0.7.tar.gz
- Upload date:
- Size: 33.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
525d192db7685b911c54aafeffeb7b110301fe6186074c90f9ef204cbc15e4d0
|
|
| MD5 |
b96c84405ededf24857a1a03041a6220
|
|
| BLAKE2b-256 |
b8627e48adc1d2e19a642032701f0310f509cd488bc7bd40c577c3046f6aaec1
|
File details
Details for the file pycyber-0.0.7-cp310-cp310-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: pycyber-0.0.7-cp310-cp310-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 33.5 MB
- Tags: CPython 3.10, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4b2951cf6bdddfdc0e4e95d344a35aa9c46daac206359353933df82d9571499
|
|
| MD5 |
62909cb6d6c40f856e96c92842fc287d
|
|
| BLAKE2b-256 |
d87a7c4d64edaf65d9bcf3479afa75c7191bf7f2579007836a0bb78be99070d7
|