o6\Python
High-performance OPC UA for Python — client and server — built on the native open62541 SDK.
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
- Commercial (developer seat or volume): see the o6\Python product page or contact contact@o6-automation.com
- Non-commercial, research and education: o6\Python is dual-licensed and available under the AGPL at https://github.com/o6-automation/o6-python-agpl. For research and education, get in touch and request a free research license.
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.
- Documentation: https://docs.o6-automation.com/o6-python/
- Product page: https://www.o6-automation.com/o6-python/
- Company: https://www.o6-automation.com/
- AGPL source: https://github.com/o6-automation/o6-python-agpl
- Contact: contact@o6-automation.com or the contact form
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a55434c4c7e7c1b4ab33f274c44f078689d472b564eb54d128dd78fc5096108
|
|
| MD5 |
a8b67c32206af6782f39f3ec397e7ee8
|
|
| BLAKE2b-256 |
c84a4f0c0580692caf6110fe5b58d7ba8cb2f5ee847ffacda112e5476c92da9b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3c2a727bdcbe6952da8420adc0af94abf410eb182131bc4d18e961ec9d5efa0
|
|
| MD5 |
f7c55209749c3a37f7c74066e42de10a
|
|
| BLAKE2b-256 |
f46646d765cdbda4b2ecd62d3c7c9213a4b45991943042ea017db86d375f0c88
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e60be68d759b004585385836bd84f555547b75255d13e774669c9e048e5049bf
|
|
| MD5 |
a21747304c097917b99f648cf141ddc4
|
|
| BLAKE2b-256 |
cd9af95c0d09c6e094709a1205a02e86d9a4c48ac893f68a390a2e9d59fe4110
|
File details
Details for the file o6-2.1.0-cp314-cp314-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: o6-2.1.0-cp314-cp314-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 7.0 MB
- Tags: CPython 3.14, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7ae7cc8f43c82dd08fece732958fefc448b1c440811b6577d69c3747c7e1a17
|
|
| MD5 |
5aaa731cbdb718fa99a94b7c5a6ce18b
|
|
| BLAKE2b-256 |
a3f43e969d184e06b059d59d7d67df3fcdced54b69419abc3adf054f63bb34fc
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62e434c14abb3de046e7df646a6d01df6a1215d59bedf4ac5bf1ff07bfc8b3e2
|
|
| MD5 |
dd766a6a42bc911d7f5e4ae7153a705a
|
|
| BLAKE2b-256 |
35ef2addfa1c21fa8a591c1f00bf8b155e93ef0435d42491f094854b7f428375
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a085780da1dbeb56475b8868f4eab718379346089f625c60af7511c365771cd
|
|
| MD5 |
ecc9afc06d60f27e9f636eb5e2d21d36
|
|
| BLAKE2b-256 |
c8fe77473c5158d7dcfcab12365f7e365726d1b90110b6b9fbdad3329f3e99ef
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba6f80ad067a8a62419e93eedb50bf57e96ea110b08517e00de5f3a2738b0d9e
|
|
| MD5 |
147003d1b37856b5230a525bdee69b6c
|
|
| BLAKE2b-256 |
f0515ad2e36388375fb801934027803a7384634bedc435f6c976c6a5ca6e146f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38ceed750c86fc795e3c933450bb01d3688aebd141a0b252c02a3c4f79752e1a
|
|
| MD5 |
7a71a2b97f868eecb2a196096acd5f30
|
|
| BLAKE2b-256 |
2fa7f9d10a33e4a6c6070ad65ff04e0319a1c024295fe89d448fd2f45ea305aa
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df39c453bcc795632dfb86ef64ad81e89c69ba01f47bc58d75edb152f794c8f9
|
|
| MD5 |
5a2a72fa8afbbf666010ffb7dfb7659d
|
|
| BLAKE2b-256 |
8b9af697230f1540b10dda18cfb95625e1f3dd27a8211e90776d0164fa4c8889
|
File details
Details for the file o6-2.1.0-cp313-cp313-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: o6-2.1.0-cp313-cp313-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 7.0 MB
- Tags: CPython 3.13, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9023195ce42315be4d2157cbe88a3d08610616144286e8fe4f356aaee56e4080
|
|
| MD5 |
bf020c6203e51fa8698b135abf517630
|
|
| BLAKE2b-256 |
8486c99163be4a6631af4310eea6240d2b2721d9cf0a2f5c207b6560d2806513
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91a3b4f0ce21adfb4d07f48e3a09792a9acc58ddde53c53da708c8df21f6cd35
|
|
| MD5 |
c916fe4ef2677a3b81bd17d3fabcd8a5
|
|
| BLAKE2b-256 |
3df30e589686f953f307520c5b7b39ad20996975177a507357575c74d085cb13
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bb13e82323a5b21b3c0e91592296b6d2e813ef5651549769bc1878ecc4143f8
|
|
| MD5 |
c1abab708baae9a5dda51c3bab00b5ed
|
|
| BLAKE2b-256 |
4c3e9b04c721e553ab6dd86c950b8270aaab600b002fcac2bca6553530c1555e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b466645bcfb6b3138ce27b95e4ae97e4c5951e55ea8ca637ba9b61b1651a7d24
|
|
| MD5 |
8a95931b4b5f5ac3fc16a6940e0e00f3
|
|
| BLAKE2b-256 |
a8ae3dc3386ba8a081b1e1faa6a1097ffb6302f4e690dc8aa29a678e23c92b3c
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9709a1f3bfa08ca2e53ff3b856e70fd76917986ce865118dbd84efebf92bac44
|
|
| MD5 |
63275a6129b0650a94d4b52b9c1abbc1
|
|
| BLAKE2b-256 |
531c304e6c2dfc80c4ec923c8021799b213976bebb9c8166741f6a03e2877938
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c55162e90f81238864c9d195d856ba4bf4829f5b111436b0499e202b36ffbe52
|
|
| MD5 |
83c90c7e3e5f08898750296434a8f694
|
|
| BLAKE2b-256 |
f27bec8178d70a4d0bea2a1cd7512db4d8f3e306a0e2771498712cdec7c32da2
|
File details
Details for the file o6-2.1.0-cp312-cp312-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: o6-2.1.0-cp312-cp312-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 7.0 MB
- Tags: CPython 3.12, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b7e8793967afe5386d399e640147cbf32de93cc7e753b646f8b694887416afe
|
|
| MD5 |
3ad366339884a8858c1cdff7e940de8e
|
|
| BLAKE2b-256 |
694dd98cd27d22250d2e3ffb8811051896f0b64fd07ed53741e9a95705e676f5
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07ee9d4f19a4c9f85166a5522de84651392719ffe344d37d567e79bc0ac5e884
|
|
| MD5 |
a16add620b7a430ef7ba325c8a7fce04
|
|
| BLAKE2b-256 |
ec947077f30e655eb42fddc9a32f76a7d322cbdc9c0790970bc7ba4bd1b9143e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e86932f4adecac4a9f79942ea4bb8294abea5f82a0f279a40cb377fbd2798d30
|
|
| MD5 |
1abeee8d1f21562ce38204489d408da7
|
|
| BLAKE2b-256 |
212d7aac2448771fe4d88d076af3b9495ffd396d9a5ecf3604478d2e0672ffdd
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e781adcf920f5d15ece471aac823722ebee8a8479bf6924765c952118f1d3a1b
|
|
| MD5 |
bc3021e61026bad9d1f9f715392c9b3f
|
|
| BLAKE2b-256 |
74b2a9d0c819572fddf1f62af255538eec5b068382380f57857cb20563dd16e6
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2df22948664f0de97c912b7e77f6ed24b1577c5b9d4b6662a8193594e858a7de
|
|
| MD5 |
3a72a8112efdb983792ff2310c1f1f3d
|
|
| BLAKE2b-256 |
1f07478b8d68796cb6cadee295335c81b9fffc659a58b00773345991338b7ead
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0c08b35d52be8f730005957550f7a956567b123c76c58a3681ebf1a05a12e8e
|
|
| MD5 |
4c7c9152f0cd8d73b68a40fad5577086
|
|
| BLAKE2b-256 |
13435b7b69303ca5be6f23c1b41570b27d272ce2be878f1f3c2d4438bec848a5
|
File details
Details for the file o6-2.1.0-cp311-cp311-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: o6-2.1.0-cp311-cp311-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 7.0 MB
- Tags: CPython 3.11, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3bae12e7f18c76efdbd56c15ed173a988d6a75bddefd6b9860710ed026a75764
|
|
| MD5 |
df996c8b2bdc680732b6ba29cff35bd9
|
|
| BLAKE2b-256 |
59beaa3c3d3d05b7ff8761f6fc4bc624b2205008d1e53be07c9decb05cd42309
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e913353a0d99c8d5ded4b008bc10dee535e31b6000865a86f2287cfa6d0f16d
|
|
| MD5 |
038f4beef43083447eea080a35e2d40f
|
|
| BLAKE2b-256 |
576aee8db7f60a06394cb76a8c775695b6a8e53d7226af273278edba4640d9b5
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42bb92698e219e6346d4a97206f4d09c1a7f65268d868ef7b814154ce43dd358
|
|
| MD5 |
ed6991d28613add10d9de24ade57d1b0
|
|
| BLAKE2b-256 |
e231acb1c4fab919e09b4d714e2eb3bae8f0a5183ea6e3198bbd136c461ad64c
|