-
Notifications
You must be signed in to change notification settings - Fork 5
Description
Currently, users must install from source using pip (or package manager of choice). Providng standalone executables would make for easier distribution and installation.
Requirements
- Build platform-specific binaries
- Select suitable executable bunder/generator for binary creation
- Automate builds via GitHub Actions for CI/CD automation of build/release
- Matrix builds for each platform
- Use standard Python packaging tools (PyInstaller or similar)
- Produce downloadable artifacts attached to GitHub releases
Platforms:
- Windows (x64): .exe installer or standalone executable
- macOS (x64/ARM64): .app bundle or .dmg
- Linux (x64): AppImage or .tar.gz with executable
Potential issues
We need to select an installer tool that works with the dependencies of this project.
PyQt5 and system libraries (serial, OpenCV) must be properly bundled. May need platform-specific handling for camera/serial drivers.
There's potential difficulty in distributing with the libraries that have been chosen for this project. See: https://nuitka.net/info/pyqt5.html. We can try Nuitka but given that the app uses threading for video display, this may be problematic.
It looks like PyInstaller can work, though builds the largest and least optimised binaries:
This appears to be a good article regarding executable generator tool selection:
https://sparxeng.com/blog/software/python-standalone-executable-generators-pyinstaller-nuitka-cx-freeze
Build Workflow
- Trigger on release tags (v*)
- Matrix build across [windows-latest, macos-latest, ubuntu-latest]
- Install dependencies including PyQt5
- Run PyInstaller with spec file
- Upload artifacts to release
Tasks
- Create PyInstaller(/Nuitka/CXFreeze) spec file for kvm_serial
- Test binary builds locally on each platform
- Create .github/workflows/build-binaries.yml
- Configure workflow to attach binaries to releases
- Update README with download/installation instructions for binaries
- Document build process
On completion of this issue, users should be able to download and run the serial-kvm application without Python installation. Binaries should work on clean systems without additional dependencies, and automated builds should be triggered on version tags by a workflow.