Cubuzoa builds Python wheels for Linux, macOS, and Windows on a single host operating system by spawning VirtualBox machines.
- Host OS requirements
- Python versions
- Backends
- Dependencies
- Usage
- Documentation
- Example Python projects that use Cubuzoa
- Contribute
Cubuzoa should work on any operating system supported by Virtual Box. It has been tested on the following host operating systems so far:
- Ubuntu 20.04
- macOS Big Sur 11.3.1
- macOS Monterey 12.5
A complete installation requires about 100 GB of free disk space for the following resources:
- Linux Vagrant box (
0.5 GB) - macOS Vagrant box (
19 GB) - Windows Vagrant box (
16 GB) - Linux VirtualBox machine (
7.3 GB) - macOS VirtualBox machine (
33 GB) - Window VirtualBox machine (
22 GB)
Cubuzoa compiles wheels for:
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
Linux guest builds rely on Manylinux 2014 x86-64 (https://github.com/pypa/manylinux).
Windows guest builds create both 32-bits and 64-bits versions.
The build backend is automatically determined by parsing pyproject.toml in the target project directory. The following build backends are supported:
"setuptools.build_meta"(https://setuptools.readthedocs.io/en/latest/build_meta.html)"maturin"(https://github.com/PyO3/maturin)"pyinstaller"(https://www.pyinstaller.org)
Cubuzoa requires VirtualBox with its Extension Pack (https://www.virtualbox.org/wiki/Downloads) and Vagrant (https://www.vagrantup.com/downloads). You can download them from the command line with the following commands:
- Ubuntu
sudo apt install virtualbox virtualbox-ext-pack vagrant
- macOS
brew install --cask virtualbox virtualbox-extension-pack brew tap hashicorp/tap brew install hashicorp/tap/vagrant
- Windows
choco install virtualbox --params "/ExtensionPack" choco install vagrant
- Clone this repository and install Python dependencies
git clone https://github.com/neuromorphicsystems/cubuzoa.git
cd cubuzoa
python3 -m pip install -r requirements.txt
- Download and start the VirtualBox machines
python3 -m cubuzoa provision- Build wheels or frozen packages for a Python project
python3 -m cubuzoa build /path/to/python/project- Delete the virtual machines and delete all downloaded resources
python3 -m cubuzoa unprovision --pruneYou may repeat step 3 any number of times with different projects.
python3 -m cubuzoa provision [-h] [--os OS] [--force] [--build DIRECTORY]
Optional arguments:
-h,--helpshow this help message and exit--os OSoperating system regex filter, case insensitive (defaults to.*)--forceinstall VMs even if they already exist--build DIRECTORYsets the VM build directory (defaults to./build)
python3 -m cubuzoa build [-h] [--wheels WHEELS] [--os OS] [--version VERSION] [--skip-sdist] [--build DIRECTORY] project
Positional arguments:
projectpath to the project directory
Optional arguments:
-h,--helpshow this help message and exit--wheels WHEELSpath to the output wheels directory, defaults to{project}/wheels--os OSoperating system regex, case insensitive (defaults to.*)--version VERSIONversion specifiers in PEP 440 format (defaults to>=3.7,<=3.9, see https://www.python.org/dev/peps/pep-0440/#version-specifiers)--skip-sdistdo not create a source distribution--build DIRECTORYsets the VM build directory (defaults to./build)
python3 -m cubuzoa [suspend, resume, halt, or up] [-h] [--os OS] [--build DIRECTORY]
-h,--helpshow this help message and exit--os OSoperating system regex filter, case insensitive (defaults to.*)--build DIRECTORYsets the VM build directory (defaults to./build)
python3 -m cubuzoa unprovision [-h] [--prune] [--clean] [--build DIRECTORY]
Optional arguments:
-h,--helpshow this help message and exit--prunedelete downloaded Vagrant boxes--cleandelete any VirtualBox machine whose name starts withcubuzoa---build DIRECTORYsets the VM build directory (defaults to./build)
- https://github.com/neuromorphicsystems/event_stream (setuptools)
- https://github.com/neuromorphicsystems/aedat (maturin)
Run black . to format the source code (see https://github.com/psf/black).
Run pyright . to check types (see https://github.com/microsoft/pyright).
