Skip to main content

Ultra-fast websocket client and server for asyncio

Project description

https://raw.githubusercontent.com/tarasko/picows/master/docs/source/_static/banner.png

Introduction

https://img.shields.io/github/actions/workflow/status/tarasko/picows/run-tests.yml?branch=master Latest PyPI package version Downloads count Latest Read The Docs

picows is a high-performance python library designed for building asyncio WebSocket clients and servers. Implemented in Cython, it offers exceptional speed and efficiency, surpassing other popular WebSocket python libraries.

https://raw.githubusercontent.com/tarasko/picows/master/docs/source/_static/picows_benchmark.png

The above chart shows the performance of echo clients communicating with a server through a loopback interface using popular Python libraries. boost.beast client is also included for reference. Typically, picows is ~1.5-2 times faster than aiohttp. All Python clients use uvloop. Please find the benchmark sources here.

Installation

picows requires Python 3.8 or greater and is available on PyPI. Use pip to install it:

$ pip install picows

Documentation

https://picows.readthedocs.io/en/stable/

Motivation

Popular WebSocket libraries provide high-level interfaces that handle timeouts, flow control, optional compression/decompression, and reassembly of WebSocket messages from frames, while also implementing async iteration interfaces. However, these features are typically implemented in pure Python, resulting in significant overhead even when messages are small, un-fragmented (with every WebSocket frame marked as final), and uncompressed.

The async iteration interface relies on asyncio.Futures, which adds additional work for the event loop and can introduce delays. Moreover, it’s not always necessary to process every message. In some use cases, only the latest message matters, and previous ones can be discarded without even parsing their content.

API Design

The library achieves superior performance by offering an efficient, non-async data path, similar to the transport/protocol design from asyncio. The user handler receives WebSocket frame objects instead of complete messages. Since a message can span multiple frames, it is up to the user to decide the most effective strategy for concatenating them. Each frame object includes additional details about the current parser state, which may help optimize the behavior of the user’s application.

Getting started

Echo client

Connects to an echo server, sends a message and disconnect upon reply.

import asyncio
import uvloop
from picows import ws_connect, WSFrame, WSTransport, WSListener, WSMsgType, WSCloseCode

class ClientListener(WSListener):
    def on_ws_connected(self, transport: WSTransport):
        self.transport = transport
        transport.send(WSMsgType.TEXT, b"Hello world")

    def on_ws_frame(self, transport: WSTransport, frame: WSFrame):
        print(f"Echo reply: {frame.get_payload_as_ascii_text()}")
        transport.send_close(WSCloseCode.OK)
        transport.disconnect()


async def main(url):
    (_, client) = await ws_connect(ClientListener, url)
    await client.transport.wait_disconnected()


if __name__ == '__main__':
    asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
    asyncio.run(main("ws://127.0.0.1:9001"))

This prints:

Echo reply: Hello world

Echo server

import asyncio
import uvloop
from picows import ws_create_server, WSFrame, WSTransport, WSListener, WSMsgType, WSUpgradeRequest

class ServerClientListener(WSListener):
    def on_ws_connected(self, transport: WSTransport):
        print("New client connected")

    def on_ws_frame(self, transport: WSTransport, frame: WSFrame):
        if frame.msg_type == WSMsgType.PING:
            transport.send_pong(frame.get_payload_as_bytes())
        elif frame.msg_type == WSMsgType.CLOSE:
            transport.send_close(frame.get_close_code(), frame.get_close_message())
            transport.disconnect()
        else:
            transport.send(frame.msg_type, frame.get_payload_as_bytes())

async def main():
    def listener_factory(r: WSUpgradeRequest):
        # Routing can be implemented here by analyzing request content
        return ServerClientListener()

    server: asyncio.Server = await ws_create_server(listener_factory, "127.0.0.1", 9001)
    for s in server.sockets:
        print(f"Server started on {s.getsockname()}")

    await server.serve_forever()

if __name__ == '__main__':
  asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
  asyncio.run(main())

Features

  • Maximally efficient WebSocket frame parser and builder implemented in Cython

  • Re-use memory as much as possible, avoid reallocations, and avoid unnecessary Python object creations

  • Provide Cython .pxd for efficient integration of user Cythonized code with picows

  • Ability to check if a frame is the last one in the receiving buffer

  • Auto ping-pong with an option to customize ping/pong messages.

  • Convenient method to measure websocket roundtrip trip time using ping/pong messages.

Contributing / Building From Source

  1. Fork and clone the repository:

    $ git clone git@github.com:tarasko/picows.git
    $ cd picows
  2. Create a virtual environment and activate it:

    $ python3 -m venv picows-dev
    $ source picows-dev/bin/activate
  3. Install development dependencies:

    # To run tests
    $ pip install -r requirements-test.txt
    
    # To run benchmark
    $ pip install -r requirements-benchmark.txt
    
    # To build docs
    $ pip install -r docs/requirements.txt
  4. Build inplace and run tests:

    $ export PICOWS_BUILD_EXAMPLES=1
    $ python setup.py build_ext --inplace
    $ pytest -s -v
    
    # Run specific test with picows debug logs enabled
    $ pytest -s -v -k test_client_handshake_timeout[uvloop-plain] --log-cli-level 9
  5. Run benchmark:

    $ python -m examples.echo_server
    $ python -m examples.echo_client_benchmark
  6. Build docs:

    $ make -C docs clean html

Project details


Download files

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

Source Distribution

picows-1.5.0.tar.gz (28.4 kB view details)

Uploaded Source

Built Distributions

picows-1.5.0-cp313-cp313-win_amd64.whl (460.8 kB view details)

Uploaded CPython 3.13 Windows x86-64

picows-1.5.0-cp313-cp313-win32.whl (441.1 kB view details)

Uploaded CPython 3.13 Windows x86

picows-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ x86-64

picows-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ ARM64

picows-1.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

picows-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ ARM64

picows-1.5.0-cp313-cp313-macosx_11_0_arm64.whl (205.7 kB view details)

Uploaded CPython 3.13 macOS 11.0+ ARM64

picows-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl (220.4 kB view details)

Uploaded CPython 3.13 macOS 10.13+ x86-64

picows-1.5.0-cp312-cp312-win_amd64.whl (460.9 kB view details)

Uploaded CPython 3.12 Windows x86-64

picows-1.5.0-cp312-cp312-win32.whl (441.4 kB view details)

Uploaded CPython 3.12 Windows x86

picows-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

picows-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

picows-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

picows-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

picows-1.5.0-cp312-cp312-macosx_11_0_arm64.whl (208.0 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

picows-1.5.0-cp312-cp312-macosx_10_9_x86_64.whl (222.7 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

picows-1.5.0-cp311-cp311-win_amd64.whl (467.8 kB view details)

Uploaded CPython 3.11 Windows x86-64

picows-1.5.0-cp311-cp311-win32.whl (447.8 kB view details)

Uploaded CPython 3.11 Windows x86

picows-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

picows-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

picows-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

picows-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

picows-1.5.0-cp311-cp311-macosx_11_0_arm64.whl (206.5 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

picows-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl (224.8 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

picows-1.5.0-cp310-cp310-win_amd64.whl (466.4 kB view details)

Uploaded CPython 3.10 Windows x86-64

picows-1.5.0-cp310-cp310-win32.whl (447.6 kB view details)

Uploaded CPython 3.10 Windows x86

picows-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

picows-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

picows-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

picows-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

picows-1.5.0-cp310-cp310-macosx_11_0_arm64.whl (205.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

picows-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl (221.5 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

picows-1.5.0-cp39-cp39-win_amd64.whl (466.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

picows-1.5.0-cp39-cp39-win32.whl (447.7 kB view details)

Uploaded CPython 3.9 Windows x86

picows-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

picows-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

picows-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

picows-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

picows-1.5.0-cp39-cp39-macosx_11_0_arm64.whl (205.1 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

picows-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl (221.4 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

picows-1.5.0-cp38-cp38-win_amd64.whl (468.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

picows-1.5.0-cp38-cp38-win32.whl (449.0 kB view details)

Uploaded CPython 3.8 Windows x86

picows-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

picows-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

picows-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

picows-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

picows-1.5.0-cp38-cp38-macosx_11_0_arm64.whl (205.5 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

picows-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl (221.6 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

File details

Details for the file picows-1.5.0.tar.gz.

File metadata

  • Download URL: picows-1.5.0.tar.gz
  • Upload date:
  • Size: 28.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0.tar.gz
Algorithm Hash digest
SHA256 5371d112886d7eed536519ee70053e6ab3887f2e40e13f91d8a7dda2f6d9606c
MD5 eb2100b8d0d0f9380e3838ee2bb41eb6
BLAKE2b-256 6d8db480f43eb419380a4b0b6185227b7ef1c2b3872b6120373b796bad62c5ac

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: picows-1.5.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 460.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cf7524c916354842e1843c6c4cd6b2ae6f48cbec7c17be506dd679707f35bfcb
MD5 56b2f44f213df952c73b45e495b18d93
BLAKE2b-256 a3027247ab318997f6608930df70b179f1e5ad7f7f1e3aaad577202c5a330492

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp313-cp313-win32.whl.

File metadata

  • Download URL: picows-1.5.0-cp313-cp313-win32.whl
  • Upload date:
  • Size: 441.1 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 fcad0bfecf312ab1db1ea53603efa5a4bb5826fa28e33efae8fe3a9ebe8f0179
MD5 3bda404d5f32db9b62a130997608de6f
BLAKE2b-256 c06733312f739ad29ac27d7450f0101f170301b513eed139c7617760aa34e485

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 333c4bab7de777e22ce0c50e1325167822b0cdcd67c7755e91359673ff268bad
MD5 24cfa8228b11efda0ba65b910de5e4d0
BLAKE2b-256 8a680df250e0f177eb45cef565c9954b48d4a6841eaea5d46d445f59754626e3

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 84881f1651615078b1c065f96106e370bda360850347b11a6aaf972a6d655b99
MD5 67b0034bb465a0553b5b9aafac25fe62
BLAKE2b-256 4c5c489b92a22edb9183975686ee014f73690da8a065ad93bce5c8d950e747de

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bce23a5e8434497c2a761031854f0df29717d23c2bf10f645405968af4e57e86
MD5 905353b7748d3e49fc6fe9484cee22f1
BLAKE2b-256 cf441e5670ba2523113635812fb4d185fe0b6fd65993b4689761c754664386fe

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 05300e1def4bb4324b7edf147c680ddec7637120a9a36d369c20c2a2d0828bbf
MD5 2d6b82f5e7a50f6e4281ebcef07539a2
BLAKE2b-256 e969dd66a215d42bdcdc9cf9fadc8f08924108ac122e09647d29615ec95ed1cf

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 32f024efbf3ddea0ecba988d09cbee70c28d678e48c13ed05d742948ed9f68e8
MD5 aab1aaef7770f18b37ed7bd4c218747e
BLAKE2b-256 c6ea59a46db8f53eee8716eae29f3d866feedc568a2138c510d4eaff8b97de08

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 d7cf61622708666ea239eb7f5926a2f3de471adf6b4d837a153042b37337661c
MD5 3c703fc8e8c431ef29e37df218f246eb
BLAKE2b-256 831722c38fcbe1a4c18d4891d0dc07727aaf53252447f90ab4a9085f8ba1ce52

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: picows-1.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 460.9 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e812c2996c7ab0c242ba95ad47921a2e79cbd94a4ebd75c036eb7566da5c5103
MD5 57f0db67c49ad9d759c230648fd92986
BLAKE2b-256 d06ca6eb4de8237254212d209ddf43be661c0d56d53c09087335614b911ee5ba

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp312-cp312-win32.whl.

File metadata

  • Download URL: picows-1.5.0-cp312-cp312-win32.whl
  • Upload date:
  • Size: 441.4 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 f92a4bfee9f3424128e65a39b81f85a10c7dbc5f7a44461342822befb5e7a02f
MD5 31fd4e2c688bd038a2e4c94467d2f25a
BLAKE2b-256 1f2b9138b85a852f0af26c8f8b5e8b9b10ac7edc7b47f9e2aa0b4f7c0877f95b

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ba598d6bef27b13a5a1cfbfab25538108c2286ef5ede5f94fc4b45ea51bd636b
MD5 06ff5e37259888f167102c387d503ddd
BLAKE2b-256 c4dc0e42880d4e8d37951f7848b37bd9261cb10d08690cab238918205eec465c

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3e9c6cf6d3a81df74cf5e42a32e96aa5dd05a47b9ed7ce052bb517d81f15add8
MD5 61084d09f46da147388b4ed28b709d91
BLAKE2b-256 2e4639417e4866a0635fbada62d68cf5a9cb577cfe37eb37a633a109cc613c6b

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 90c7f6b13a260e14024ebf8e2b57c0ce7361812540bd1d6da3fb0cde46fec8cb
MD5 8c544982447eb8be36e8b7bc5f19f39e
BLAKE2b-256 52e68eb20ee89dc1ae08e7bbb4e77424a11d80d0d4e574e99d132315fc35644c

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5f004dab1649723660669937b6721773e017df66780c4d645b2f9a7fb6b955c6
MD5 d09a34d294e02ae1c3e10eae76472dac
BLAKE2b-256 67d929d3e388865abc32e4dbad2df35830ead77afc15a11295766f9a947be40d

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db4cf9243cdb84d82fe87edb83ec27a088598167bd01ab8eec29381c51b06bde
MD5 10ec13845d47b62de308c088ec0c1e96
BLAKE2b-256 438da309817c7c642b349fa6ac5cfa3de030c7a34d7df29713f6ebe08557e0db

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 49b0ce1c4d12a8ac9133e114947946a356c06815e3b537653a03747b4bbd03de
MD5 83ca572be2d54faabecdb84e60851d7b
BLAKE2b-256 0b22aefef7c6df28b0c448caca25d057f38adc46617b2ebb5fd881aa1e9e08ba

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: picows-1.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 467.8 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fdfd568d2d4d2adbee72c58480c6252e1f6937966b099df78d54b961efff0e4a
MD5 385843501898d95bd22445e20245d6d8
BLAKE2b-256 daa070ba348ae06277366640973b0e61dfa5f54958d808a6a29b05f822a6e983

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: picows-1.5.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 447.8 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 806fa4d0ff75e969ef48a6003d2794a2677448575c9fc381c66bc39f0f3d384d
MD5 3a10148bb1e6b1b2df92297c5c43e4e3
BLAKE2b-256 c27b25b016596bed8677f05aebdc3f7bb230221e45e64bda6353a7bc5e225fc5

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4e174d359696af0bf4a90828a700648c2d50b64cc16e9ed0c478efcf6107c888
MD5 c71b3823d8c37960d5045ba58b3253a2
BLAKE2b-256 fed8c6aae9af5a5b243d37c71b57714eb909255b61e568b02690e4841340b25a

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5ba0f0cdb82ee3ab213411d22cec09756c211590e5310a516a2a63ef1187ba41
MD5 91a02131a6e128bc86845d4f4c014e9a
BLAKE2b-256 406e5651141e555036b321fb2222fdb3c16a393a72eb325dee2a6ab7203d3880

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87d45a11397017cbdb875f4f05cb11b2b87469ac460cd21485d3a5096a27e3ec
MD5 7670b31302d2c0a03334c370d7bd2e3d
BLAKE2b-256 4195f976016e45ce122ea317b4cc26a341099840ce475098db8b40abf87b674f

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 98d399e5268549484a7870a2dd75b852b2dff3ec6d00804873d5941ae8e0ca1b
MD5 5934dc5f881c418f718f8c3d2d4b6bdf
BLAKE2b-256 31ef62a47fd4ede3f967b87a0da139c987be6d6deef8e8919c5564e39d7e3ead

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 983d18fa857fe094d90637c86fd83b00b5f3783725e52e93b05e335abfa3d9a5
MD5 9fa0784d6c622a4b55d61a5f6254ede0
BLAKE2b-256 5d5317f534776e30173df457066a1484ae1baeab8bc665e9d071b7144f171b6a

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 54bca70c90ba24dd572e6b680ec244a94cea5ef0f3bead555c04f30aa19d0a5a
MD5 5970eb8aad89c754fe4f9ca09fbca7a9
BLAKE2b-256 729f906ba5d9b484ed835f78b03705d2e44053afe7b78e1cebd092e6465fb60f

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: picows-1.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 466.4 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e326c890b24fa99006f49dd08a903160e7f78098a47a8774ac56e2e28825174f
MD5 f841cde155a3568c541d842e3a8d6fc0
BLAKE2b-256 df1b383acf05a0c53676fc1e691098fb4e2d8dd19377155f8170687e157404b4

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp310-cp310-win32.whl.

File metadata

  • Download URL: picows-1.5.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 447.6 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 75f5c82eea7d605993de13e3d40fdc71a6344285313acacf6251a1f139328729
MD5 2f5c2b89886308ae9fb6f0c7846ea12b
BLAKE2b-256 1aedeed2f7d56d1c53d787c2e3f37b6b6df686b85c4ef225ae1f37d731a9eb2e

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 108f59471971267b9499a78f6bfdc86c9f81e4588a07124eba894a7d71165884
MD5 a74ae05d64a60f9d1f3b254fa5a6714c
BLAKE2b-256 1e46562b9298466d945b64d19a4c8eff06e3fc6be9763c795bad3432397256c6

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3c83c7d36cf6da98d673691f4ed406cdc6d6a84dd72d0394b47be579d43b3689
MD5 869d6c5fb58606a6210ad8f2b56a7834
BLAKE2b-256 dc90658a97730147235912847e9f45391066be53843d611c681abab960c7d516

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4c9c0a5dcea295e7ffe68af4802b1ae5f6115b8d7b9205d1534507d617435ec3
MD5 f4623bc88105117dffebe9e16d9c6cfc
BLAKE2b-256 41fc97468643d292df1a953f6388f6087875f56b235b86f53ff6e2c0db872813

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4e23ea57713a9a5ad292e35c3b040e1a7517032b4ada55c019b1847f7a928460
MD5 0d17bedde640229024bb83b0b6aca6bf
BLAKE2b-256 5fa8f2eca67bd744e6afbad4b21d5e1331cc35c67cb7558cbddfd907a1198978

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 834151234ae1d7527131c3758179d09703f64fe3c8cee5ebb6d4bcdea2fd029a
MD5 198e4f2ddf6175583cec5a15123107b9
BLAKE2b-256 2006fd343bb80412a26a68313a0e23d23f97150ab1bf0a888bc65b783f952eb4

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 87de30e1a376dbca77469d1a5fa23325a32a1ef052b670d8b11fd031297a0eab
MD5 bf0ed5baac4f00b690718b9a764bb7c3
BLAKE2b-256 3a3d09260c595ae0722fb1b12eed4ef9d91a43e7573e0c36427ed720023f9919

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: picows-1.5.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 466.4 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 312d0bc61584b916a5625fa96e23e826eae823713f365425d9e119e944409544
MD5 882f2aec82b4c5bad409ab232d9e0969
BLAKE2b-256 902714fac6e48692dcb267438f2a619c35e38c559d9b0c135b6e7634108f9372

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: picows-1.5.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 447.7 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 5da3655445d767fc0532efd35fd0e77eea782d9623156cd3284533fc2fb5fdb8
MD5 7a09a1f043f84a60fa69d347406ee8e2
BLAKE2b-256 28f252ac7acfb9dd642e3a0181193b7d9a31364d8b81fd39d8caa89159b0fc5d

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b5cdb35ef728f45d574245e6c6833653482064527c98eeb5a6c264a7fafe5b5d
MD5 00045d84d52189ecbac3cfa6b277b503
BLAKE2b-256 cf175d4ab2f99f998f89c9c21f45369f36054e1d301628f8073e70f3a0d8d56f

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8f41efe041555d8334a9109a59d43a27adc9b68722443b339f6228ab9e3ac2b5
MD5 ce67a34094a69749255865a3083c590e
BLAKE2b-256 4cdaecee8672c3d8d5156a97b4d9ec59710fe150371dec82e82e1453a1fac2f2

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 53b3f8145a86db90ca56c383dbe7bed3a5123d692c9f4e00d30c6b7bfae52e43
MD5 cb2d1b682efecb08f69196752c2ff0aa
BLAKE2b-256 0bbedc19014dbd71ed3ee740308527535d363db96201a689f17c2c8d0f0fd359

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c7b4dbdf448b340e82e5e71b1b1eb5a9e340a0af970d49714c310a348dc1ed82
MD5 f0acb3767b5f2d37cb0226c0cfdda7ba
BLAKE2b-256 e9f83f4a132d1781aa1acff824eb91b15da8f24bfd96782d46a198b72d105c53

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1fc8e99b43397c2c2ad1cf3894d2738c8fcce91f3142d2d7cf460385d25f5757
MD5 82ac36e19082eea945a59db131b0604e
BLAKE2b-256 a7b232f8cd38c22860d5936bc643c71b7b834f3afcef75826f98385c7e1202cb

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1cff4b9966c2d8510dc7bbd94717385fa47da97ee8997783d77734d2e3f33934
MD5 893a72dba5beebfb2d6253e1ae2b09a1
BLAKE2b-256 4a109a98a0d18cdb7fd7c7944d2bb76b3124df637c5bbb6d8fcc7284a0ca4588

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: picows-1.5.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 468.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 243b024b8893604c4ec80af693d6020c145ffa5a8ff199f1fc08267ddcd30c41
MD5 6d1912a188d662c2c51ceb891887a2ad
BLAKE2b-256 ac9bfb8cff6314073bf9384dc4fa998ace35b1baaa573b36e2743ec0fa35e99c

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: picows-1.5.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 449.0 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for picows-1.5.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 662d86f71c99e4c7614b6cee2457652104b22bc83363f5e4c7eadff2246e0539
MD5 2d15f522ab2104681d07c6b1291fe707
BLAKE2b-256 125ab77552067881d17c33960f91aec970c5f71e5be13ad32e33666845d713d8

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7c8413933beefec150b90dedd1800cc3de24b7668ddf38f3875e41a14dcdcb89
MD5 78298a2215803a79fcd30680d2e0d5c9
BLAKE2b-256 a5e8834a568950e5a041a7693f5d6ec8c8f4e1acea7433066fcc5372b1c3535e

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b5f815f91a8326ddeb98cc84dc512ad2b92298de95e4ac0aaaa94c24ce1406f8
MD5 765c150dfc2efa6110a1409485a02529
BLAKE2b-256 da7be4a18a709fef5ad30af353a2df77557274261e7e2123d520f6537d2e9f44

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b6ceb60d2b3535c151ce3f27d7d4892ce19ff355eaa814147d11dfddfa291066
MD5 91df1bcbde5303d76dde5ad3d5dfec23
BLAKE2b-256 148af3018ecc7a89015b6f5ced0e1c8647a3879e8dbe63b6fbca5e979b9b722c

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fe3b3522fbc0fb56d5c7a4ac6c8a5b798e1fb0a8f204194fc8f75bb9de33b5ca
MD5 2ee1afd8f898d737db5e7317996bc414
BLAKE2b-256 e733b25879a487dac1882d6ac8da62c85955ab92fff2ca2ca70ed1e55d169abb

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2e560afea71e3bd9ef64b3ec247de8af30f0cc4976cd528842b652bbba1230ff
MD5 d2c5f82fd46623696325d95aace60072
BLAKE2b-256 12595394e687a1d6a4a8ffa059e6f6ede1cf0f66add3c3e2536de2e41947adba

See more details on using hashes here.

File details

Details for the file picows-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for picows-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1ea9eb54df0c2534dbfabc2822c27fa431f2cbf8e7830155ae664679ed7d516b
MD5 0483ab28b48a884a11016782a3011bce
BLAKE2b-256 b31212466a110699e5912dda62cb8b0c0b3f49f6b1821e6d787db2c0d24c007a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page