Skip to main content

Viam Python SDK

PyPI PyPI - Python Version documentation build status license

The Viam Python SDK allows you to build robots, access existing Viam robots, and manage your fleet of Viam robots.

If you would like a blueprint on setting up a Python environment with Viam from scratch, you can follow our Setup guide.

If you would like to develop and contribute to Viam's Python SDK, take a look at the Development portion of the README.

Installation

Currently, we have pre-built binaries for macOS (both Intel x86_64 and Apple Silicon) and Linux (x86, aarch64, armv6l) that you can install using pip:

pip install viam-sdk

If you want to install on Windows, you can install from github directly with pip:

pip install git+https://github.com/viamrobotics/viam-python-sdk.git

Note that only direct gRPC connections are supported on Windows; you will need to disable webrtc or else connection will fail. Full support (including webRTC) does exist on WSL.

If you intend to use the MLModel service, use the following command instead, which installs additional required dependencies:

pip install 'viam-sdk[mlmodel]'

You can also run this command on an existing Python SDK install to add support for the ML model service. See the ML (machine learning) model service documentation for more information.

Upgrading

To upgrade, simply run the pip install command with the -U option: pip install -U viam-sdk

Installing from Source

The Viam Python SDK uses native libraries to support communication over WebRTC, which will allow you to connect to robots that are not on the same network. In order to facilitate that communication, there is a rust-utils repo that contains the necessary protocols. Therefore, to build from source, you will need both the Rust utils and the Rust compiler.

  1. Download/clone this repository
  2. Download/clone the rust-utils
  3. Install Rust if not already available
  4. From the rust-utils directory, run cargo build
    • You can optionally provide the --release flag: cargo build --release
  5. Find the compiled library in rust-utils/target/debug/libviam_rust_utils.*
    • If you provided the --release flag, the enclosing directory will be release: rust-utils/target/release/libviam_rust_utils.*
    • The extension of the executable will depend on your operating system. For example, on macOS it will be libviam_rust_utils.dylib, whereas on Linux it will be libviam_rust_utils.so
  6. Copy the compiled library to the directory viam-python-sdk/src/viam/rpc/
  7. From the viam-python-sdk directory, run uv build --wheel to create an installable package
  8. Find the newly created installable package located in viam-python-sdk/dist/ and pip install it directly, for example: pip install viam-python-sdk/dist/viam_sdk-0.1.0-py3-none-any.whl

If you have a macOS or Linux based operating system and do not want to build rust-utils manually, you can also look for the executable in the releases page of the rust-utils library.

If you do NOT need communication over WebRTC (and thus, do not need the native library), the steps are:

  1. Download/clone this repository
  2. Run uv build --wheel from the viam-python-sdk directory
  3. Find the newly created installable package located in viam-python-sdk/dist/ and pip install it directly, for example: pip install viam-python-sdk/dist/viam_sdk-0.1.0-py3-none-any.whl
  4. Ensure that every connection has the option disable_webrtc set to True: viam.rpc.dial.DialOptions(disable_webrtc=True)

Configure a client application at app.viam.com

Your client application does not directly interact with your hardware. Instead, your client application makes calls to the viam-server which can then issue commands to your hardware or read from sensors.

To create a client application, to navigate to app.viam.com. After you log in, perform these steps:

  1. Create a location (for example home)
  2. Create a robot (for example arduino)
  3. Follow the steps on the setup tab:
    1. Setup machine cloud credentials on Single Board Computer (SBC)

    2. Download and Install Viam Server

    3. Wait until the robot shows as connected. If this doesn't happen try restarting the viam-server:

      sudo systemctl restart viam-server
      

Next, select the CONNECT tab in the Viam Web UI, and copy the boilerplate code from the section labeled Python SDK.

To ensure the installation succeeded and the systems are functional, save and run this simple program. If the program runs successfully, the python-sdk is properly installed, the viam-server instance on your robot is alive, and the computer running the program is able to connect to that instance.

The RobotClient & connectivity

The main entry point for using the SDK as a client is the RobotClient class. This class can manage resources, operations, frames, etc., for the robot. It can also manage connectivity and behavior around sessions and reconnection through the RobotClient.Options nested class.

The RobotClient will attempt to refresh its resources at a set interval (customizable via Options).

In the event that connection is lost to the robot, the RobotClient will attempt to reconnect at a set interval. There are two options available for customizing this behavior: how often the client checks the connection status (RobotClient.Options.check_connection_interval), and how often the client attempts to reconnect upon detecting a loss of connection (RobotClient.Options.attempt_reconnect_interval).

Upon a loss of connection, outstanding requests are NOT terminated and can possibly error with a GRPCError whose status is DEADLINE_EXCEEDED. When connection is restored, existing built-in clients will automatically receive the new connection - no need to re-obtain the client. Tasks initiated by Viam will automatically resume, but any user-defined tasks that depend on the connection should be checked and potentially restarted.

The Viam Python SDK utilizes gRPC and, optionally WebRTC (defaults to on). gRPC is provided purely in python, but WebRTC is provided by the external viam Rust utils library. WebRTC settings can be changed using the appropriate attributes in viam.rpc.dial.DialOptions. These options can be passed to the RobotClient through RobotClient.Options.dial_options.

Sessions

Sessions are a safety feature that automatically cancel operations made by the python client if it loses connection to a robot. Sessions are enabled by default but can be disabled by setting RobotClient.Options.disable_sessions = True. Please see the RDK session documentation for more details and server-side configuration options.

Examples

Read the Example Usage page, to learn how to access a component, build a custom component, and expose custom components as a remote to existing robots.

More examples can be found in the examples directory.

Documentation

Documentation, like this entire project, is under active development, and can be found at python.viam.dev.


Development

To contribute to the python SDK, please see the contribution guidelines.

Adding new resource types

The SDK provides a number of abstract base components and services (collectively: resources). To add more abstract resources, follow these steps:

  1. Create a new directory in viam.components or viam.services with the name of the new component
  2. Create 4 new files in the newly created directory:
    1. Define all requirements of the resource in {RESOURCE_NAME}.py
    2. Implement the gRPC service for the new resource in service.py
    3. Create a gRPC client for the new resource in client.py
    4. Register the API and define package exports in __init__.py
  3. Write tests for the new resource and add the resource to tests.mocks.{components|services}
  4. If the resource is a component, add the component to examples.server.v1.components and its corresponding concrete type in examples.server.v1.server

License

Copyright 2021-2024 Viam Inc.

Apache 2.0 - See LICENSE file

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

viam_sdk-0.79.2-py3-none-win_amd64.whl (6.7 MB view details)

Uploaded Python 3Windows x86-64

viam_sdk-0.79.2-py3-none-musllinux_1_2_x86_64.whl (7.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

viam_sdk-0.79.2-py3-none-musllinux_1_2_i686.whl (7.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

viam_sdk-0.79.2-py3-none-musllinux_1_2_armv7l.whl (7.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

viam_sdk-0.79.2-py3-none-musllinux_1_2_aarch64.whl (7.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

viam_sdk-0.79.2-py3-none-manylinux2014_x86_64.whl (7.8 MB view details)

Uploaded Python 3

viam_sdk-0.79.2-py3-none-manylinux2014_aarch64.whl (7.8 MB view details)

Uploaded Python 3

viam_sdk-0.79.2-py3-none-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

viam_sdk-0.79.2-py3-none-macosx_10_16_x86_64.whl (7.2 MB view details)

Uploaded Python 3macOS 10.16+ x86-64

viam_sdk-0.79.2-py3-none-linux_armv7l.whl (7.6 MB view details)

Uploaded Python 3

viam_sdk-0.79.2-py3-none-linux_armv6l.whl (7.6 MB view details)

Uploaded Python 3

File details

Details for the file viam_sdk-0.79.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: viam_sdk-0.79.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 6.7 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for viam_sdk-0.79.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 03ac5f4b629bda6981b0edd7bfc0df1ee03994dd79691490f3308b8c269262c0
MD5 e82be3b6e5febc596d06fef8cbbd3fb7
BLAKE2b-256 8d409ffa92008871a7fea37fb50505b3c947316d5dfeaf04749bd322902ae513

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7018014194492750ae94ab1ff5f3f4f0d8017f0aecc71fb1a07ee2cfaf772a02
MD5 7487a51803efe42ab363ee5aa9f06b68
BLAKE2b-256 4fc4919846e2cee90e78508f33528a3d77bc939b60c638c8826d3975b0d3a030

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 40a6b23d7e23720f634d2ce60906a93863f7b42e8590ded9eeae1a86997eff0f
MD5 6ef3ba3fa5a1c264e06b0e45f0f6c560
BLAKE2b-256 f7922d78f627e0d664e77d07db65560652785a6b72fe5e77e48ae150748adf8b

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 b0e9dd667f275e574a4f536595fb74b32f4b709c0ec90ce285058864c97850b2
MD5 6fcd44f467042df2a30505701734fbd2
BLAKE2b-256 409b9bfbc45ab424b73381f13bf9ea77b530ca48f489a4fab46af8112e33da43

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f06aa103734ccc9b7e8f32535729325dbe46cc9948fbc88dc8ac554971134e94
MD5 95a846f92c758023a19c377fb81d4fe1
BLAKE2b-256 29e8bedec83dffef2c9629292dcd87dd9bcbc87f439737aac3642e2a105e95f2

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ddcc5b7906d9fc5250885178aafe57c9dcfae3730eda206d8eaebb905c14a2a2
MD5 cd1a90a04560c9956adfd2fba5f8463c
BLAKE2b-256 0ae4afe3cbbb0d9e09831774e365e916a02c63a75124bb139fa3d71c14a5875b

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 076d626ffa633273a1a9e22925e73df94855a1dcce3225a4a4c118b8b3b618be
MD5 f65e7cf3038d26c41059eb9e8e89e64f
BLAKE2b-256 4a13f68651b99b6cbcf275debf64fe46719245e1069a2dbb7f8a975e0dbed320

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 888d1e32525690bb0537a50fc0a1b02d0a9fdc16aa6310292e1390c62af49fe3
MD5 dc6589cf00dfeac37abf1e07a9b361e8
BLAKE2b-256 fa0ca724ed439d2f92366c68a401166b4ee7f2542b27d95289cf29b746b061a2

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-macosx_10_16_x86_64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-macosx_10_16_x86_64.whl
Algorithm Hash digest
SHA256 3f0294e95cd72b63a4a223013ddec9e16579d1321a2de96c44421f48fd3341ab
MD5 063a3d860d52d20fbe9955f7196701e3
BLAKE2b-256 ba347a457a9f42c2fbfa18b666df3d52a4324abd98836214bd7ac57ae4693a25

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-linux_armv7l.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-linux_armv7l.whl
Algorithm Hash digest
SHA256 e8397ceead95111a05e3e7d5fd110ff9041ceb47873bfe5d6d855cc94a7fc602
MD5 9fc02e6d5b881b726b7ce5b93c1b9a6f
BLAKE2b-256 1186a08ea537aaa8eaf0b98de91fbc4af3dc372647cf65373ea9df262cd80076

See more details on using hashes here.

File details

Details for the file viam_sdk-0.79.2-py3-none-linux_armv6l.whl.

File metadata

File hashes

Hashes for viam_sdk-0.79.2-py3-none-linux_armv6l.whl
Algorithm Hash digest
SHA256 e4f78020e30d52bd1ab9621a7f954442101ee79b9ffc57c7ccbbcfcf27d6206e
MD5 c9e99a71fd12c3c09f725a15a508fe0b
BLAKE2b-256 697e6280140f35a6508931410001b32ca35983bd16908afdccb80b5a868820ec

See more details on using hashes here.

Release history Release notifications | RSS feed

0.80.0

11 files

This release

0.79.2 This release

11 files

0.79.1

11 files

0.79.0

11 files

0.78.1

11 files

0.78.0

11 files

0.77.0

11 files

0.76.0

11 files

0.75.0

11 files

0.74.0

11 files

0.73.1

11 files

0.72.0

11 files

0.71.1

11 files

0.71.0

11 files

0.70.0

11 files

0.69.0

11 files

0.68.0

11 files

0.67.0

11 files

0.66.0

11 files

0.65.0

11 files

0.64.0

11 files

0.63.0

11 files

0.62.0

11 files

0.61.0

11 files

0.60.0

11 files

0.59.0

11 files

0.58.0

11 files

0.57.1

11 files

0.57.0

11 files

0.56.0

11 files

0.55.1

11 files

0.55.0

11 files

0.54.0

11 files

0.53.0

11 files

0.52.0

11 files

0.51.0

11 files

0.50.0

11 files

0.49.0

11 files

0.48.0

11 files

0.47.0

11 files

0.46.0

11 files

0.45.2

11 files

0.45.1

10 files

0.45.0

10 files

0.44.1

10 files

0.44.0

10 files

0.43.1

10 files

0.43.0

10 files

0.42.0

10 files

0.41.1

10 files

0.41.0

10 files

0.40.0

10 files

0.39.0

10 files

0.38.0

10 files

0.37.0

10 files

0.36.0

10 files

0.35.0

10 files

0.34.0

10 files

0.33.0

10 files

0.32.0

10 files

0.31.1

10 files

0.31.0

10 files

0.30.0

10 files

0.29.3

10 files

0.29.2

10 files

0.29.1

10 files

0.29.0

10 files

0.28.0

10 files

0.27.0

10 files

0.26.0

10 files

0.25.2

10 files

0.25.1

9 files

0.25.0

7 files

0.24.0

7 files

0.23.0

7 files

0.22.0

7 files

0.21.1

7 files

0.21.0

7 files

0.20.0

7 files

0.19.0

7 files

0.18.0

7 files

0.17.0

7 files

0.16.2

7 files

0.16.1

7 files

0.15.0

5 files

0.14.0

5 files

0.13.3

5 files

0.13.2

5 files

0.13.1

5 files

0.13.0

5 files

0.12.0

5 files

0.11.0

5 files

0.10.0

5 files

0.9.1

5 files

0.9.0

5 files

0.8.1

5 files

0.8.0

5 files

0.7.0

5 files

0.6.1

5 files

0.6.0

5 files

0.5.1

5 files

0.5.0

5 files

0.4.8

5 files

0.4.7

5 files

0.4.6

5 files

0.4.5

5 files

0.4.4

5 files

0.4.3

5 files

0.4.2

5 files

0.4.1

5 files

0.4.0

5 files

0.2.3

5 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page