Ouster Python SDK Development
Building ouster-sdk
package
Building the Python SDK from source requires several dependencies:
a C++14-capable compiler
cmake >= 3.5
eigen >= 3.3
curl >= 7.58
jsoncpp >= 1.7
libtins >= 3.4
libglfw3 >= 3.2
spdlog >= 1.9
Python >= 3.7 (with headers and development libraries)
pybind11 >= 2.0
The Python SDK source is available on the Ouster Github. You should clone the whole project.
Linux and macos
On supported Debian-based linux systems, you can install all build dependencies by running:
$ sudo apt install build-essential cmake \
libeigen3-dev libjsoncpp-dev libtins-dev libpcap-dev \
python3-dev python3-pip pybind11-dev libcurl4-openssl-dev \
libglfw3-dev libglew-dev libspdlog-dev
On macos >= 10.13, using homebrew, you should be able to run:
$ brew install cmake eigen curl jsoncpp libtins python3 pybind11 glfw glew spdlog
After you have the system dependencies, you can build the SDK with:
# first, specify the path to the ouster_example repository
$ export OUSTER_SDK_PATH=<PATH TO OUSTER_EXAMPLE REPO>
# make sure you have an up-to-date version of pip installed
$ python3 -m pip install --user --upgrade pip
# then, build an installable "wheel" package
$ python3 -m pip wheel --no-deps $OUSTER_SDK_PATH/python
# or just install directly (virtualenv recommended)
$ python3 -m pip install $OUSTER_SDK_PATH/python
Note
We recommend to always use Virtual Environment for python development.
Windows 10
On Windows 10, you’ll have to install the Visual Studio 2017 Build Tools, Python and the vcpkg package manager and run:
PS > vcpkg install --triplet=x64-windows eigen3 jsoncpp libtins pybind11 glfw3 glad[gl-api-33] spdlog
The currently tested vcpkg tag is 2022.02.23
. After that, using a developer powershell prompt:
# first, specify the path to the ouster_example repository
PS > $env:OUSTER_SDK_PATH="<PATH TO OUSTER_EXAMPLE>"
# point cmake to the location of vcpkg (make sure to use an absolute path)
PS > $env:CMAKE_TOOLCHAIN_FILE="<PATH TO VCPKG REPO>\scripts\buildsystems\vcpkg.cmake"
# set the correct vcpkg triplet
PS > $env:VCPKG_TARGET_TRIPLET="x64-windows"
# set build options related to the compiler
PS > $env:CMAKE_GENERATOR_PLATFORM="x64"
PS > $env:CMAKE_GENERATOR="Visual Studio 15 2017"
# then, build an installable "wheel" package
PS > py -m pip wheel --no-deps "$env:OUSTER_SDK_PATH\python"
# or just install directly (virtualenv recommended)
PS > py -m pip install "$env:OUSTER_SDK_PATH\python"
See the top-level README in the Ouster Example repository for more details on setting up a development environment on Windows.
Developing
Install in editable mode with pip using pip install -e
. For a faster development cycle, you can
rebuild using python3 setup.py build_ext -i
instead of reinstalling the package after every
change. For a local debug build, you can also add the -g
flag.
The Ouster SDK package includes configuration for flake8
and mypy
. To run:
# install and run flake8 linter
$ python3 -m pip install flake8
$ cd ${OUSTER_SDK_PATH}/python
$ python3 -m flake8
# install and run mypy in an environment with
$ python3 -m pip install mypy
$ python3 -m mypy src/
Running Tests
To run tests while developing, install the pytest
package and run it from the root of the Python
SDK package:
$ cd ${OUSTER_SDK_PATH}/python
$ python3 -m pytest
To run interactive viz.PointViz
tests, use --interactive
argument:
$ cd ${OUSTER_SDK_PATH}/python
$ python3 -m pytest --interactive
To run tests against multiple Python versions simultaneously, use the tox
package:
$ cd ${OUSTER_SDK_PATH}/python
$ python3 -m tox
This will take longer, since it will build the package from a source distribution for each supported Python version available.
Using Dockerfile
To simplify testing on multiple linux distros, a Dockerfile is included for running tox
on a
variety of Debian-based distros with all packaged Python versions pre-installed. To build a test
image, run:
$ docker build ${OUSTER_SDK_PATH} -f ${OUSTER_SDK_PATH}/python/Dockerfile \
--build-arg BASE=ubuntu:20.04 \
-t ouster-sdk-tox
the BASE
argument will default to ubuntu:18.04
, but can also be set to other docker tags,
e.g. ubuntu:20.04
, ubuntu:22.04
or debian:10
. Then, run the container to invoke tox:
$ docker run -it --rm ouster-sdk-tox