Plugin Interface#

External packages can register new interfaces by using the can.interface entry point in its project configuration. The format of the entry point depends on your project configuration format (pyproject.toml, setup.cfg or setup.py).

In the following example module defines the location of your bus class inside your package e.g. my_package.subpackage.bus_module and classname is the name of your can.BusABC subclass.

# Note the quotes around can.interface in order to escape the dot .
[project.entry-points."can.interface"]
interface_name = "module:classname"
[options.entry_points]
can.interface =
    interface_name = module:classname
from setuptools import setup

setup(
    # ...,
    entry_points = {
        'can.interface': [
            'interface_name = module:classname'
        ]
    }
)

The interface_name can be used to create an instance of the bus in the python-can API:

import can

bus = can.Bus(interface="interface_name", channel=0)

Example Interface Plugins#

The table below lists interface drivers that can be added by installing additional packages that utilise the plugin API. These modules are optional dependencies of python-can.

Note

The packages listed below are maintained by other authors. Any issues should be reported in their corresponding repository and not in the python-can repository.

Name

Description

python-can-canine

CAN Driver for the CANine CAN interface

python-can-cvector

Cython based version of the ‘VectorBus’

python-can-remote

CAN over network bridge

python-can-sontheim

CAN Driver for Sontheim CAN interfaces (e.g. CANfox)