Skip to content

Commit

Permalink
Create single-file executables (#59)
Browse files Browse the repository at this point in the history
Use `pyinstaller` to generate a single-file executables for linux, macos, Windows (Closes #37).
For now, they are only stored as GitHub actions artifacts and aren't accessible by
unauthenticated users (-> #62).
  • Loading branch information
dweindl authored Jan 15, 2025
1 parent ca83eb6 commit 02eb081
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 0 deletions.
132 changes: 132 additions & 0 deletions .github/workflows/bundle.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Build and Package

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
linux_bundle:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ github.job }}-${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }}
restore-keys: |
${{ github.job }}-${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -e .
- name: Build with PyInstaller
run: |
pyinstaller --name ccompass_bundle_onefile --onefile --windowed -p . $(which ccompass)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ccompass_bundle_onefile_linux
path: dist/ccompass_bundle_onefile

windows_bundle:
runs-on: windows-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Cache pip
uses: actions/cache@v4
with:
path: ~\AppData\Local\pip\Cache
key: ${{ github.job }}-${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }}
restore-keys: |
${{ github.job }}-${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -e .
- name: Create launcher script
# we can't use the setuptools shim (.exe) on Windows
run: |
echo "from ccompass.CCMPS import main" > launcher.py
echo "main()" >> launcher.py
- name: Build with PyInstaller
run: |
pyinstaller \
--name ccompass_bundle_onefile \
--onefile \
--windowed \
-p . \
launcher.py \
--hidden-import numpy.core._dtype_ctypes \
--hidden-import numpy.core.multiarray
shell: bash

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ccompass_bundle_onefile_windows
path: dist/ccompass_bundle_onefile.exe

macos_bundle:
runs-on: macos-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Cache pip
uses: actions/cache@v4
with:
path: ~/Library/Caches/pip
key: ${{ github.job }}-${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }}
restore-keys: |
${{ github.job }}-${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -e .
- name: Build with PyInstaller
run: |
pyinstaller --name ccompass_bundle_onefile --onefile --windowed -p . $(which ccompass)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ccompass_bundle_onefile_macos
path: dist/ccompass_bundle_onefile
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,14 @@ The data analyzed by C-COMPASS typically derives from proteomics fractionation s

## Installation

### Single-file executables

Single-file executables that don't require a Python installation are available on the release page.

On Windows, make sure to install the Microsoft C and C++ (MSVC) runtime libraries before ([further information](ttps://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170), [direct download](https://aka.ms/vs/17/release/vc_redist.x64.exe)).

### Via pip

```bash
pip install ccompass
```
Expand Down

0 comments on commit 02eb081

Please sign in to comment.