Skip to main content

o6\Python

High-performance OPC UA for Python — client and server — built on the native open62541 SDK.

PyPI version Python versions Documentation

You need to talk to industrial equipment — a robot cell, a CNC machine, a packaging line — and it speaks OPC UA. With o6\Python that looks like this:

from o6 import Client

with Client("opc.tcp://localhost:4840") as client:
    print(client.objects.Machine.Speed())     # read it
    client.objects.Machine.Speed(1500)        # write it
    client.objects.Machine.Reset()            # call it

Every OPC UA server publishes an information model: a browsable tree of typed nodes describing what the machine is and what it can do. o6\Python turns that tree into Python objects, so you can point a REPL at a machine you have never seen, type client.objects. and press Tab, and browse the real thing — no vendor PDF, no NodeId spreadsheet.

The same principle runs through the rest of the library. o6\Python is a complete OPC UA stack, client and server: the address space is Python objects, and the protocol underneath is compiled C. Reads, writes, browsing, method calls, subscriptions, events, historical access, custom information models, and the full security stack are all first-class.

pip install o6

Note: The wheel published here runs in evaluation mode. The full Client and Server API is available, with a two hours runtime. See Licensing.

Full documentation: https://docs.o6-automation.com/o6-python/


Why this is different

OPC UA is a superb protocol wrapped in a miserable developer experience: numeric node IDs carry the meaning, XML files have to be shipped and parsed at startup, and every value arrives as a Variant to unwrap and cast by hand.

The promise of OPC UA is that the semantics travel with the protocol, so no manual is needed to know what a value means. In practice one manual is often traded for another, and the effort shifts from speaking N protocols to understanding OPC UA itself. o6\Python is built to keep that promise: the semantics are already there, and using them should not require studying the protocol first.

Typical OPC UA constraints o6\Python
ns=4;i=6021 with the meaning in a comment DeviceHealthEnumeration.NORMAL, autocompleted
Ship the NodeSet2 XML, parse it on every start from o6.ns import di, compiled into the package
A Variant you unwrap and cast to the right type A plain, correctly-typed value
Read a vendor PDF to find a node's id Press Tab in a REPL — names and descriptions included
Structures arrive as opaque extension objects Structures arrive as your classes, with .pyi stubs
Commit to a process model up front One call syntax, with or without await
Nodesets in cumbersome XML Nodesets as readable Python, compiled from XML or written directly

What you get

Native speed. The protocol stack is compiled C, and it shows in both roles — see the benchmark results.

Client and server, one API. Connect to existing servers or expose your own address space, with the same types and conventions — and the same calls work synchronously or with await inside asyncio, so an application never has to commit to a concurrency model up front.

More than 130 companion specifications, included. Machinery, Robotics, Machine Tools (umati), PackML, EUROMAP, Machine Vision, UAFX and many more ship as importable, fully type-annotated Python namespaces, alongside a compiler for your own NodeSet2 XML files.

Information models written in Python. Declare object types, variable types, structures, enumerations, and methods with decorators. The server builds the nodes, and from that point the classes are your API.

Typed against the specification. NumPy-backed builtin scalars, generated .pyi stubs for structure fields, IDE autocompletion, mypy-checkable signatures.

Secure by default. Encrypted channels, the full range of security policies and modes, certificate and username authentication, and role- and permission-based access control — a foundation intended for products that go through official OPC UA certification.

Prebuilt wheels. CPython 3.11–3.14 on Linux, macOS, and Windows, for x86-64 and ARM64. No compiler, no CMake, no C toolchain.

Quick start

A Client is a context manager: connect it in a with block, and the secure channel and the session open on entry and close on the way out — including when your code raises. Address values by NodeId; the familiar string form works wherever a NodeId is accepted.

import o6
from o6 import Client

with Client("opc.tcp://localhost:4840") as client:
    value = client.read("ns=1;s=IntegerVariable")
    client.write("ns=1;s=IntegerVariable", o6.UInt32(42))

Batch reads and writes: hand read a list or write a dict, and the whole group travels in a single service call rather than one round trip per value.

Walking the server as an object tree

Start from one of four entry points on a connected client — client.root, client.objects, client.types, and client.views — and step one level deeper into the live server with every ..

variables = client.objects.MyVariables

print(variables.MyInteger())                      # read
variables.MyInteger(42)                           # write
print(client.objects.TestMethods.Hello("o6"))     # call a method

For browse names that are not valid Python identifiers, use bracket syntax — it takes a whole path, as in client.objects["MyDevice/Temperature Setpoint"].

Subscribe, stop polling

Subscribe in a single line, and the server reports changes as they occur. Use client.monitorEvent for events.

client.monitor("ns=1;s=IntegerVariable", lambda v: print(v), samplingInterval=500.0)

A full server in two calls

from o6 import Server

server = Server(port=4840)
server.start()

That is a running OPC UA server with a standard address space. Add your own content from there, imperatively at runtime or declared as types.

The same client, asynchronously

Nothing changes but the await.

import asyncio
from o6 import Client

async def main():
    async with Client("opc.tcp://localhost:4840") as client:
        print(await client.read("i=2258"))   # server time

asyncio.run(main())

Companion specifications, with no XML at runtime

A companion specification is an information model agreed on by an industry group. It fixes the model of a device, machine, or process, so that a robot from one vendor and a robot from another expose the same types with the same semantics.

Traditionally, using one means bundling its NodeSet2 XML file with your application, parsing it at startup, and addressing everything inside through numeric IDs. o6\Python compiles them ahead of time instead, so you just import one. More than 130 ship as ordinary Python packages under o6.ns, each exposing its content through five category modules: datatypes, objtypes, vartypes, reftypes, and instances.

import o6
from o6.ns import di            # OPC UA for Devices

# Structures are classes; their fields keep their exact OPC UA types,
# and the package ships .pyi stubs so your editor and mypy know them.
result = di.datatypes.TransferResultDataDataType()
result.sequenceNumber = 42

# Enumerations are enumerations, and inheritance is plain Python inheritance.
di.datatypes.DeviceHealthEnumeration.NORMAL

# Types carry their NodeId, so you never hand-write one.
o6.NodeId(di.objtypes.DeviceType)            # ns=di;i=1002

See the documentation for every packaged specification.

Each one carries its own metadata: URI, version, index, and a shortname. Use the shortname wherever a namespace index is expected, and o6.NodeId("ns=di;i=1002") resolves correctly against servers that number their namespaces differently.

Publish a specification on a server by appending the module (server.ns.append(di)). On a client, declare nothing at all — on connect it matches the server's advertised namespace URIs against what it has compiled in, down to the exact version when the server publishes its metadata.

Your own NodeSet2 XML files join them on equal footing: run the bundled compiler and a *.NodeSet2.xml becomes exactly this kind of Python package — a build step you pay for once, instead of an XML parse on every process start. The generator fails on constructs it cannot represent faithfully, so an unsupported nodeset is a compile error, not a silently incomplete address space.

Information models written in Python

Write your own types the same way you use the packaged ones: declare a namespace, then decorate a class per structure, enumeration, variable type, and object type, using hasProperty and hasComponent for a type's children. There is no XML editor, no modeling tool, and no generate-and-reload cycle between having an idea and running a server that serves it.

# plant.py
import o6
from o6.ns import ns0

o6.ns.namespace("plant", uri="http://example.org/Plant/", version="1.0")

@o6.enumtype(ns="plant", description="Machine state")
class MachineState:
    IDLE = 0
    RUNNING = 1
    FAULT = 2

@o6.variabletype(ns="plant", dataType=o6.Double, valueRank=o6.ValueRank.SCALAR)
class TemperatureType(ns0.vartypes.BaseDataVariableType):
    engineeringUnits: ns0.vartypes.PropertyType = o6.hasProperty(
        ns0.vartypes.PropertyType(dataType=str)
    )

@o6.objecttype(ns="plant", browseName="MachineType")
class MachineType(ns0.objtypes.BaseObjectType):
    state: ns0.vartypes.PropertyType = o6.hasProperty(
        ns0.vartypes.PropertyType(dataType=MachineState)
    )
    temperature: TemperatureType = o6.hasComponent(TemperatureType())
    reset: o6.node.MethodNode = o6.hasComponent(o6.call())

That is a complete information model, carrying the same content a NodeSet2 XML file carries in a few dozen lines a human can read, review in a diff, and comment on in a pull request. Because these are ordinary classes, they compose with the companion specifications: derive from a DI or Machinery type, and your vendor-specific extension is plain subclassing with the standard parts included.

Publish the module on a server, and the classes are your API.

import o6
import plant

server = o6.Server(port=4840)
server.ns.append(plant)
server.start()

machine = plant.MachineType(
    parent=server.objectsNode,
    browseName="M-101",
    values={"state": int(plant.MachineState.RUNNING)},
)

machine.state()                        # 1
machine.temperature(23.5)              # write
machine.temperature.engineeringUnits() # read a property of a property

One instantiation created the object, its properties, its methods, and its whole subtree in the address space, and attribute access reads and writes live values. Import the same module in a client process, and your structures decode as the classes you declared rather than as opaque extension objects.

Requirements

  • CPython 3.11–3.14 (standard GIL build)
  • NumPy ≥ 2.0, < 3
  • Linux with glibc ≥ 2.28 (manylinux_2_28), macOS ≥ 15, or Windows 10 LTSC 2021 / Server 2022 and newer — on x86-64 or ARM64

Licensing

This PyPI package is the commercial build of o6\Python. It is licensed for commercial use; an o6-issued Credential is required for production use.

Without a valid Credential, the package runs in two-hour evaluation mode: the full Client and Server API is available, and the process is terminated with a failure exit status when the two-hour timer expires. See also Credential discovery and Feature Scope

Support

o6\Python is developed, maintained, and supported by o6 Automation, the SDK manufacturer. That includes the associated CRA and cybersecurity obligations. Training, long-term support, and certification assistance are available.

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.

o6-2.1.0-cp314-cp314-win_arm64.whl (6.1 MB view details)

Uploaded CPython 3.14Windows ARM64

o6-2.1.0-cp314-cp314-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.14Windows x86-64

o6-2.1.0-cp314-cp314-manylinux_2_28_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

o6-2.1.0-cp314-cp314-manylinux_2_28_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

o6-2.1.0-cp314-cp314-macosx_15_0_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

o6-2.1.0-cp314-cp314-macosx_15_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

o6-2.1.0-cp313-cp313-win_arm64.whl (6.0 MB view details)

Uploaded CPython 3.13Windows ARM64

o6-2.1.0-cp313-cp313-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.13Windows x86-64

o6-2.1.0-cp313-cp313-manylinux_2_28_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

o6-2.1.0-cp313-cp313-manylinux_2_28_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

o6-2.1.0-cp313-cp313-macosx_15_0_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.13macOS 15.0+ x86-64

o6-2.1.0-cp313-cp313-macosx_15_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

o6-2.1.0-cp312-cp312-win_arm64.whl (6.0 MB view details)

Uploaded CPython 3.12Windows ARM64

o6-2.1.0-cp312-cp312-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.12Windows x86-64

o6-2.1.0-cp312-cp312-manylinux_2_28_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

o6-2.1.0-cp312-cp312-manylinux_2_28_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

o6-2.1.0-cp312-cp312-macosx_15_0_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.12macOS 15.0+ x86-64

o6-2.1.0-cp312-cp312-macosx_15_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

o6-2.1.0-cp311-cp311-win_arm64.whl (6.0 MB view details)

Uploaded CPython 3.11Windows ARM64

o6-2.1.0-cp311-cp311-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.11Windows x86-64

o6-2.1.0-cp311-cp311-manylinux_2_28_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

o6-2.1.0-cp311-cp311-manylinux_2_28_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

o6-2.1.0-cp311-cp311-macosx_15_0_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.11macOS 15.0+ x86-64

o6-2.1.0-cp311-cp311-macosx_15_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

File details

Details for the file o6-2.1.0-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: o6-2.1.0-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 6.1 MB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 4a55434c4c7e7c1b4ab33f274c44f078689d472b564eb54d128dd78fc5096108
MD5 a8b67c32206af6782f39f3ec397e7ee8
BLAKE2b-256 c84a4f0c0580692caf6110fe5b58d7ba8cb2f5ee847ffacda112e5476c92da9b

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: o6-2.1.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 6.1 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d3c2a727bdcbe6952da8420adc0af94abf410eb182131bc4d18e961ec9d5efa0
MD5 f7c55209749c3a37f7c74066e42de10a
BLAKE2b-256 f46646d765cdbda4b2ecd62d3c7c9213a4b45991943042ea017db86d375f0c88

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: o6-2.1.0-cp314-cp314-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.14, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e60be68d759b004585385836bd84f555547b75255d13e774669c9e048e5049bf
MD5 a21747304c097917b99f648cf141ddc4
BLAKE2b-256 cd9af95c0d09c6e094709a1205a02e86d9a4c48ac893f68a390a2e9d59fe4110

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for o6-2.1.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d7ae7cc8f43c82dd08fece732958fefc448b1c440811b6577d69c3747c7e1a17
MD5 5aaa731cbdb718fa99a94b7c5a6ce18b
BLAKE2b-256 a3f43e969d184e06b059d59d7d67df3fcdced54b69419abc3adf054f63bb34fc

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp314-cp314-macosx_15_0_x86_64.whl.

File metadata

  • Download URL: o6-2.1.0-cp314-cp314-macosx_15_0_x86_64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.14, macOS 15.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 62e434c14abb3de046e7df646a6d01df6a1215d59bedf4ac5bf1ff07bfc8b3e2
MD5 dd766a6a42bc911d7f5e4ae7153a705a
BLAKE2b-256 35ef2addfa1c21fa8a591c1f00bf8b155e93ef0435d42491f094854b7f428375

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

  • Download URL: o6-2.1.0-cp314-cp314-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.14, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 3a085780da1dbeb56475b8868f4eab718379346089f625c60af7511c365771cd
MD5 ecc9afc06d60f27e9f636eb5e2d21d36
BLAKE2b-256 c8fe77473c5158d7dcfcab12365f7e365726d1b90110b6b9fbdad3329f3e99ef

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: o6-2.1.0-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 ba6f80ad067a8a62419e93eedb50bf57e96ea110b08517e00de5f3a2738b0d9e
MD5 147003d1b37856b5230a525bdee69b6c
BLAKE2b-256 f0515ad2e36388375fb801934027803a7384634bedc435f6c976c6a5ca6e146f

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: o6-2.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 6.1 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 38ceed750c86fc795e3c933450bb01d3688aebd141a0b252c02a3c4f79752e1a
MD5 7a71a2b97f868eecb2a196096acd5f30
BLAKE2b-256 2fa7f9d10a33e4a6c6070ad65ff04e0319a1c024295fe89d448fd2f45ea305aa

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: o6-2.1.0-cp313-cp313-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 df39c453bcc795632dfb86ef64ad81e89c69ba01f47bc58d75edb152f794c8f9
MD5 5a2a72fa8afbbf666010ffb7dfb7659d
BLAKE2b-256 8b9af697230f1540b10dda18cfb95625e1f3dd27a8211e90776d0164fa4c8889

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for o6-2.1.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9023195ce42315be4d2157cbe88a3d08610616144286e8fe4f356aaee56e4080
MD5 bf020c6203e51fa8698b135abf517630
BLAKE2b-256 8486c99163be4a6631af4310eea6240d2b2721d9cf0a2f5c207b6560d2806513

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp313-cp313-macosx_15_0_x86_64.whl.

File metadata

  • Download URL: o6-2.1.0-cp313-cp313-macosx_15_0_x86_64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.13, macOS 15.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 91a3b4f0ce21adfb4d07f48e3a09792a9acc58ddde53c53da708c8df21f6cd35
MD5 c916fe4ef2677a3b81bd17d3fabcd8a5
BLAKE2b-256 3df30e589686f953f307520c5b7b39ad20996975177a507357575c74d085cb13

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

  • Download URL: o6-2.1.0-cp313-cp313-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.13, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4bb13e82323a5b21b3c0e91592296b6d2e813ef5651549769bc1878ecc4143f8
MD5 c1abab708baae9a5dda51c3bab00b5ed
BLAKE2b-256 4c3e9b04c721e553ab6dd86c950b8270aaab600b002fcac2bca6553530c1555e

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: o6-2.1.0-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 b466645bcfb6b3138ce27b95e4ae97e4c5951e55ea8ca637ba9b61b1651a7d24
MD5 8a95931b4b5f5ac3fc16a6940e0e00f3
BLAKE2b-256 a8ae3dc3386ba8a081b1e1faa6a1097ffb6302f4e690dc8aa29a678e23c92b3c

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: o6-2.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 6.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9709a1f3bfa08ca2e53ff3b856e70fd76917986ce865118dbd84efebf92bac44
MD5 63275a6129b0650a94d4b52b9c1abbc1
BLAKE2b-256 531c304e6c2dfc80c4ec923c8021799b213976bebb9c8166741f6a03e2877938

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: o6-2.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c55162e90f81238864c9d195d856ba4bf4829f5b111436b0499e202b36ffbe52
MD5 83c90c7e3e5f08898750296434a8f694
BLAKE2b-256 f27bec8178d70a4d0bea2a1cd7512db4d8f3e306a0e2771498712cdec7c32da2

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for o6-2.1.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9b7e8793967afe5386d399e640147cbf32de93cc7e753b646f8b694887416afe
MD5 3ad366339884a8858c1cdff7e940de8e
BLAKE2b-256 694dd98cd27d22250d2e3ffb8811051896f0b64fd07ed53741e9a95705e676f5

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp312-cp312-macosx_15_0_x86_64.whl.

File metadata

  • Download URL: o6-2.1.0-cp312-cp312-macosx_15_0_x86_64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.12, macOS 15.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 07ee9d4f19a4c9f85166a5522de84651392719ffe344d37d567e79bc0ac5e884
MD5 a16add620b7a430ef7ba325c8a7fce04
BLAKE2b-256 ec947077f30e655eb42fddc9a32f76a7d322cbdc9c0790970bc7ba4bd1b9143e

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

  • Download URL: o6-2.1.0-cp312-cp312-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.12, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e86932f4adecac4a9f79942ea4bb8294abea5f82a0f279a40cb377fbd2798d30
MD5 1abeee8d1f21562ce38204489d408da7
BLAKE2b-256 212d7aac2448771fe4d88d076af3b9495ffd396d9a5ecf3604478d2e0672ffdd

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: o6-2.1.0-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 e781adcf920f5d15ece471aac823722ebee8a8479bf6924765c952118f1d3a1b
MD5 bc3021e61026bad9d1f9f715392c9b3f
BLAKE2b-256 74b2a9d0c819572fddf1f62af255538eec5b068382380f57857cb20563dd16e6

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: o6-2.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 6.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2df22948664f0de97c912b7e77f6ed24b1577c5b9d4b6662a8193594e858a7de
MD5 3a72a8112efdb983792ff2310c1f1f3d
BLAKE2b-256 1f07478b8d68796cb6cadee295335c81b9fffc659a58b00773345991338b7ead

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: o6-2.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f0c08b35d52be8f730005957550f7a956567b123c76c58a3681ebf1a05a12e8e
MD5 4c7c9152f0cd8d73b68a40fad5577086
BLAKE2b-256 13435b7b69303ca5be6f23c1b41570b27d272ce2be878f1f3c2d4438bec848a5

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for o6-2.1.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3bae12e7f18c76efdbd56c15ed173a988d6a75bddefd6b9860710ed026a75764
MD5 df996c8b2bdc680732b6ba29cff35bd9
BLAKE2b-256 59beaa3c3d3d05b7ff8761f6fc4bc624b2205008d1e53be07c9decb05cd42309

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp311-cp311-macosx_15_0_x86_64.whl.

File metadata

  • Download URL: o6-2.1.0-cp311-cp311-macosx_15_0_x86_64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.11, macOS 15.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 4e913353a0d99c8d5ded4b008bc10dee535e31b6000865a86f2287cfa6d0f16d
MD5 038f4beef43083447eea080a35e2d40f
BLAKE2b-256 576aee8db7f60a06394cb76a8c775695b6a8e53d7226af273278edba4640d9b5

See more details on using hashes here.

File details

Details for the file o6-2.1.0-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

  • Download URL: o6-2.1.0-cp311-cp311-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: CPython 3.11, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for o6-2.1.0-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 42bb92698e219e6346d4a97206f4d09c1a7f65268d868ef7b814154ce43dd358
MD5 ed6991d28613add10d9de24ade57d1b0
BLAKE2b-256 e231acb1c4fab919e09b4d714e2eb3bae8f0a5183ea6e3198bbd136c461ad64c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.1.0 This release

24 files

2.0.3

24 files

2.0.2

24 files

2.0.1

24 files

1.0.6

16 files

1.0.5

16 files

1.0.3

16 files

1.0.2

6 files

1.0.1

12 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page