Skip to main content

A standard C/C++ native extension template for Python stream pusher plugins.

Project description

pusher

pusher 是一个基于 FFmpeg SDK 二次开发的 Python C/C++ 原生转推插件。默认引擎是 libav,直接链接本项目内的 include/lib/,在当前 Python 进程内启动 C++ worker 线程完成转推,不需要为每路流启动一个 ffmpeg 命令进程。

完整 SDK 方法、参数、默认值、环境变量和 CLI 说明见 SDK_API.md

它适合 -c copy 这类复制转推场景,例如:

ffmpeg -rtsp_transport tcp -i rtsp://192.168.0.206:8554/av0_0 \
  -c copy -f flv rtmp://192.168.0.138:1935/live/detect_1500

在本项目中对应为:

from pusher import Pusher

pusher = Pusher(engine="libav", loop=False, realtime=False)
pusher.start(
    "rtsp://192.168.0.206:8554/av0_0",
    "rtmp://192.168.0.138:1935/live/detect_1500",
)

引擎说明

  • libav:默认引擎。使用 FFmpeg SDK 在进程内 remux 转推,适合 RTSP/MP4/HTTP/SRT 输入转 RTMP/RTSP/SRT/RTP 输出。
  • ffmpeg:兼容模式。启动外部 ffmpeg 命令进程,便于对比排错。
  • stream_push:外部 C++ 程序模式,主要用于 WHIP/WebRTC。

100 路复制转推时建议使用 libav。每路流是一个 C++ worker 线程,不会产生 100 个 ffmpeg 子进程。

目录结构

pusher-py/
├── include/
│   ├── pusher/              # 本项目 C++ 头文件
│   ├── libavformat/         # FFmpeg SDK 头文件
│   ├── libavcodec/
│   └── libavutil/
├── src/pusher/
│   ├── _native.cpp          # CPython C API 绑定层
│   ├── pusher.cpp           # libav 转推和进程兼容模式
│   ├── url_utils.c          # 协议识别
│   ├── cli.py               # 命令行工具
│   └── __init__.py
├── examples/basic_usage.py
├── lib/                     # FFmpeg 动态库
├── scripts/build_ffmpeg.sh  # 从源码自动编译 FFmpeg SDK
├── third_party/FFmpeg/      # 内置 FFmpeg 源码
├── tests/test_basic.py
├── pyproject.toml
└── setup.py

SDK 依赖

开发仓库内可放置 FFmpeg SDK 文件:

include/libavformat
include/libavcodec
include/libavutil
lib/libavformat.so
lib/libavcodec.so
lib/libavutil.so
third_party/FFmpeg

PyPI 发布包不包含 third_party/FFmpeg 全量源码,也不包含本机编译出的 lib/*.so 构建产物。源码安装时需要提前准备本地 FFmpeg SDK,或从 GitHub 仓库获取完整源码后执行构建。

构建顺序:

  1. 如果 lib/libavformat.so 已存在,直接使用本地动态库。
  2. 如果本地动态库不存在,setup.py 会调用 scripts/build_ffmpeg.sh,从 third_party/FFmpeg 自动编译共享库并安装到本项目 include/lib/

构建脚本不会读取 /usr/local/ffmpeg,也不要求用户提前安装或编译 FFmpeg。

自动编译采用最小 FFmpeg SDK 配置,主要启用 avformatavcodecavutil 以及 RTSP/RTMP/RTP/HTTP/TCP/UDP/文件协议和常见 muxer/demuxer。目标是 copy/remux 转推,不包含 ffmpeg/ffprobe 命令行程序。

CI 发布平台

GitHub Actions 会从仓库内的 third_party/FFmpeg 自动构建 FFmpeg SDK,再构建 Python wheel。PyPI wheel 不包含 third_party/FFmpeg 源码;Linux wheel 会携带运行所需的 FFmpeg .so 动态库。

当前自动发布目标是 Linux x86_64aarch64armv7l,以及 Windows x86x64ARM64。Linux 使用 scripts/build_ffmpeg.sh,Windows 使用 MSVC + MSYS2 执行 scripts/build_ffmpeg.ps1 并产出 .lib/.dll SDK。RK 系列、树莓派、香橙派等开发板通常使用 aarch64 64 位系统或 armv7l 32 位系统;板载硬编解码能力需要单独的设备镜像/系统库适配,不包含在通用 PyPI wheel 中。

安装与构建

cd /root/workspace/ms-fish-recg-pro/pusher-py
python -m pip install -U pip setuptools wheel
python setup.py build_ext --inplace --force

开发安装:

python -m pip install -e ".[dev]"

验证导入:

PYTHONPATH=src python -c "from pusher import Pusher; print(Pusher)"

Python 使用示例

RTSP 转 RTMP

import time

from pusher import Pusher

pusher = Pusher(
    engine="libav",
    log_path="pusher.log",
    loop=False,
    realtime=False,
    timeout_ms=5000,
)

pusher.start(
    "rtsp://192.168.0.206:8554/av0_0",
    "rtmp://192.168.0.138:1935/live/detect_1500",
)

print(pusher.status())

while pusher.is_running:
    time.sleep(5)
    print(pusher.status())

注意:start() 会启动后台 C++ worker 线程并立即返回,业务进程需要保持运行。脚本如果打印一次状态后直接退出,Pusher 对象析构会停止转推。

RTSP 转 RTMP 带鉴权地址

import time

from pusher import Pusher, build_output_url

output_url = build_output_url(
    protocol="rtmp",
    host="192.168.0.138",
    app="live",
    stream="test",
    secret="557ea19cf905454bad9dc988d0c6a5g1",
)

pusher = Pusher(engine="libav", loop=False, realtime=False)
pusher.start("rtsp://192.168.0.206:8554/av0_0", output_url)

try:
    while pusher.is_running:
        print(pusher.status())
        time.sleep(5)
finally:
    pusher.stop(3000)

生成的地址:

rtmp://192.168.0.138:1935/live/test?secret=557ea19cf905454bad9dc988d0c6a5g1

本地 MP4 循环推 RTMP

from pusher import Pusher

pusher = Pusher(engine="libav", loop=True, realtime=True)
pusher.start("sample.mp4", "rtmp://127.0.0.1:1935/live/test")

本地 MP4 单次推 RTMP

from pusher import Pusher

pusher = Pusher(engine="libav", loop=False, realtime=True)
pusher.start("sample.mp4", "rtmp://127.0.0.1:1935/live/test")
exit_code = pusher.wait(timeout_ms=-1)
print("exit:", exit_code)

RTSP 转 RTSP

from pusher import Pusher, build_output_url

output_url = build_output_url(
    protocol="rtsp",
    host="192.168.0.138",
    app="live",
    stream="detect_1500",
    port=8554,
)

pusher = Pusher(engine="libav", loop=False, realtime=False)
pusher.start("rtsp://192.168.0.206:8554/av0_0", output_url)
print(pusher.status())

RTSP 转 SRT

from pusher import Pusher, build_output_url

output_url = build_output_url(
    protocol="srt",
    host="192.168.0.138",
    app="live",
    stream="detect_1500",
    port=10080,
)

pusher = Pusher(engine="libav", loop=False, realtime=False)
pusher.start("rtsp://192.168.0.206:8554/av0_0", output_url)
print(pusher.status())

SRT 需要当前 FFmpeg SDK 编译时启用 srt 协议;默认脚本未启用外部 libsrt 依赖。

RTSP 转 RTP

from pusher import Pusher

pusher = Pusher(engine="libav", loop=False, realtime=False)
pusher.start(
    "rtsp://192.168.0.206:8554/av0_0",
    "rtp://192.168.0.138:5004",
)
print(pusher.status())

MP4 推 WHIP/WebRTC

WHIP 不走 FFmpeg SDK muxer,必须使用 stream_push 引擎。stream_push_path 需要指向已经编译好的 stream_push 可执行文件,或确保它在 PATH 中。

import time

from pusher import Pusher, build_output_url

output_url = build_output_url(
    protocol="whip",
    host="192.168.0.138",
    app="live",
    stream="test",
    secret="replace-me",
    port=1985,
)

pusher = Pusher(
    engine="stream_push",
    stream_push_path="/root/workspace/ms-fish-recg-pro/whip-push-demo/build/stream_push",
    loop=True,
    bitrate=2_000_000,
)

pusher.start("sample.mp4", output_url)

try:
    while pusher.is_running:
        print(pusher.status())
        time.sleep(5)
finally:
    pusher.stop(3000)

生成的 WHIP 地址格式:

http://192.168.0.138:1985/rtc/v1/whip/?app=live&stream=test&secret=replace-me

摄像头推 WHIP/WebRTC

from pusher import Pusher, build_output_url

output_url = build_output_url(
    protocol="whip",
    host="192.168.0.138",
    app="live",
    stream="camera0",
    port=1985,
)

pusher = Pusher(
    engine="stream_push",
    stream_push_path="/root/workspace/ms-fish-recg-pro/whip-push-demo/build/stream_push",
    width=1280,
    height=720,
    fps=30,
    bitrate=2_000_000,
)

pusher.start("/dev/video0", output_url)
print(pusher.status())

使用 ffmpeg 兼容模式

from pusher import Pusher

pusher = Pusher(
    engine="ffmpeg",
    ffmpeg_path="ffmpeg",
    loop=False,
    realtime=False,
)

pusher.start(
    "rtsp://192.168.0.206:8554/av0_0",
    "rtmp://192.168.0.138:1935/live/detect_1500",
)
print(pusher.status())

ffmpeg 模式会启动外部进程,只建议用于对比排错、摄像头采集或需要转码的临时场景。

停止与等待

exit_code = pusher.wait(timeout_ms=10_000)
if exit_code is None:
    pusher.stop(timeout_ms=3000)

多路转推示例

from pusher import Pusher

tasks = []
for i in range(100):
    p = Pusher(name=f"stream-{i}", engine="libav", loop=False, realtime=False)
    p.start(
        f"rtsp://192.168.0.{100 + i}:8554/av0_0",
        f"rtmp://192.168.0.138:1935/live/detect_{i}",
    )
    tasks.append(p)

try:
    for p in tasks:
        print(p.status())
finally:
    for p in tasks:
        p.stop()

协议识别和 URL 构造

from pusher import build_output_url, detect_protocol, version

print(version())
print(detect_protocol("rtmp://192.168.0.138:1935/live/test"))

for protocol in ["rtmp", "rtsp", "srt", "rtp", "whip"]:
    print(protocol, build_output_url(protocol, "192.168.0.138", stream="demo"))

命令行工具

RTSP 转 RTMP

PYTHONPATH=src python -m pusher.cli push \
  rtsp://192.168.0.206:8554/av0_0 \
  rtmp://192.168.0.138:1935/live/detect_1500 \
  --engine libav \
  --no-loop \
  --no-realtime \
  --log-path pusher.log \
  --status-interval 5

RTSP 转 RTMP 预览

PYTHONPATH=src python -m pusher.cli preview \
  rtsp://192.168.0.206:8554/av0_0 \
  rtmp://192.168.0.138:1935/live/detect_1500 \
  --engine libav \
  --no-loop \
  --no-realtime

本地 MP4 推 RTMP

PYTHONPATH=src python -m pusher.cli push \
  sample.mp4 \
  rtmp://127.0.0.1:1935/live/test \
  --engine libav \
  --status-interval 5

RTSP 转 RTSP

PYTHONPATH=src python -m pusher.cli push \
  rtsp://192.168.0.206:8554/av0_0 \
  rtsp://192.168.0.138:8554/live/detect_1500 \
  --engine libav \
  --no-loop \
  --no-realtime

RTSP 转 SRT

PYTHONPATH=src python -m pusher.cli push \
  rtsp://192.168.0.206:8554/av0_0 \
  'srt://192.168.0.138:10080?streamid=live/detect_1500' \
  --engine libav \
  --no-loop \
  --no-realtime

RTSP 转 RTP

PYTHONPATH=src python -m pusher.cli push \
  rtsp://192.168.0.206:8554/av0_0 \
  rtp://192.168.0.138:5004 \
  --engine libav \
  --no-loop \
  --no-realtime

MP4 推 WHIP/WebRTC

PYTHONPATH=src python -m pusher.cli push \
  sample.mp4 \
  'http://192.168.0.138:1985/rtc/v1/whip/?app=live&stream=test&secret=replace-me' \
  --engine stream_push \
  --stream-push-path /root/workspace/ms-fish-recg-pro/whip-push-demo/build/stream_push \
  --status-interval 5

摄像头推 WHIP/WebRTC

PYTHONPATH=src python -m pusher.cli push \
  /dev/video0 \
  'http://192.168.0.138:1985/rtc/v1/whip/?app=live&stream=camera0' \
  --engine stream_push \
  --stream-push-path /root/workspace/ms-fish-recg-pro/whip-push-demo/build/stream_push \
  --width 1280 \
  --height 720 \
  --fps 30 \
  --bitrate 2000000 \
  --status-interval 5

ffmpeg 兼容模式

PYTHONPATH=src python -m pusher.cli push \
  rtsp://192.168.0.206:8554/av0_0 \
  rtmp://192.168.0.138:1935/live/detect_1500 \
  --engine ffmpeg \
  --ffmpeg-path ffmpeg \
  --no-loop \
  --no-realtime

构造和识别 URL

PYTHONPATH=src python -m pusher.cli build-url rtmp 192.168.0.138 \
  --app live \
  --stream test \
  --secret 557ea19cf905454bad9dc988d0c6a5g1

PYTHONPATH=src python -m pusher.cli build-url whip 192.168.0.138 \
  --app live \
  --stream test \
  --secret replace-me \
  --port 1985

PYTHONPATH=src python -m pusher.cli detect \
  'http://192.168.0.138:1985/rtc/v1/whip/?app=live&stream=test'

安装后也可使用:

pusher push input output_url --engine libav
pusher preview input output_url --json
pusher build-url rtmp 192.168.0.138 --stream demo

支持协议

输出协议映射:

输出 URL 推荐引擎 输出封装/程序
rtmp:// / rtmps:// libav flv
rtsp:// / rtsps:// libav rtsp
srt:// libav mpegts,要求当前 FFmpeg SDK 编译时启用 srt 协议
rtp:// libav rtp
http://.../rtc/v1/whip/ / https://.../rtc/v1/whip/ stream_push WHIP/WebRTC

WHIP/WebRTC 不属于 FFmpeg 常规 muxer 输出,本项目使用 stream_push 外部引擎处理。

参数说明

参数 默认值 说明
engine auto auto 会对非 WHIP 输出选择 libav
log_path libav 运行日志
loop True 本地文件读到 EOF 后是否循环
realtime True 本地文件是否按媒体时间戳限速
timeout_ms 5000 网络打开/停止等待超时
analyzeduration_us 10000000 RTSP/网络流探测时长,单位微秒
probesize 50000000 RTSP/网络流探测数据量,摄像头首包缺少尺寸时可增大
ffmpeg_path ffmpeg engine="ffmpeg" 使用
stream_push_path stream_push engine="stream_push" 使用

测试

PYTHONPATH=src python -m pusher.cli preview sample.mp4 rtmp://127.0.0.1/live/test
PYTHONPATH=src python examples/basic_usage.py

项目根目录的 test-push.py 可用于真实 RTSP 到 RTMP 验证:

cd /root/workspace/ms-fish-recg-pro
PYTHONPATH=pusher-py/src python test-push.py
PUSH_SECONDS=10 PUSH_STATUS_INTERVAL=1 PYTHONPATH=pusher-py/src python test-push.py

安装开发依赖后:

python -m pytest -q

注意事项

  • libav 当前实现是 remux/copy 转推,不做解码、滤镜和重编码。
  • 如果输入编码或目标协议不被当前 FFmpeg SDK 支持,任务会退出并在 status() 或日志中给出错误。
  • 自动编译脚本默认不启用外部 libsrt 依赖;如需 SRT,请在系统安装 libsrt 开发包后调整 scripts/build_ffmpeg.sh 的 configure 参数。
  • 摄像头采集和需要重编码的复杂场景需要后续扩展 libav 编码路径;当前默认实现优先解决 RTSP/文件等输入的 copy/remux 转推。

Project details


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.

pusher_py-0.1.8-cp314-cp314-win_arm64.whl (1.7 MB view details)

Uploaded CPython 3.14Windows ARM64

pusher_py-0.1.8-cp314-cp314-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.14Windows x86-64

pusher_py-0.1.8-cp314-cp314-win32.whl (1.5 MB view details)

Uploaded CPython 3.14Windows x86

pusher_py-0.1.8-cp314-cp314-manylinux_2_31_armv7l.whl (1.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.31+ ARMv7l

pusher_py-0.1.8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pusher_py-0.1.8-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

pusher_py-0.1.8-cp313-cp313-win_arm64.whl (1.7 MB view details)

Uploaded CPython 3.13Windows ARM64

pusher_py-0.1.8-cp313-cp313-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.13Windows x86-64

pusher_py-0.1.8-cp313-cp313-win32.whl (1.5 MB view details)

Uploaded CPython 3.13Windows x86

pusher_py-0.1.8-cp313-cp313-manylinux_2_31_armv7l.whl (1.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.31+ ARMv7l

pusher_py-0.1.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pusher_py-0.1.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

pusher_py-0.1.8-cp312-cp312-win_arm64.whl (1.7 MB view details)

Uploaded CPython 3.12Windows ARM64

pusher_py-0.1.8-cp312-cp312-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.12Windows x86-64

pusher_py-0.1.8-cp312-cp312-win32.whl (1.5 MB view details)

Uploaded CPython 3.12Windows x86

pusher_py-0.1.8-cp312-cp312-manylinux_2_31_armv7l.whl (1.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ ARMv7l

pusher_py-0.1.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pusher_py-0.1.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pusher_py-0.1.8-cp311-cp311-win_arm64.whl (1.7 MB view details)

Uploaded CPython 3.11Windows ARM64

pusher_py-0.1.8-cp311-cp311-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.11Windows x86-64

pusher_py-0.1.8-cp311-cp311-win32.whl (1.5 MB view details)

Uploaded CPython 3.11Windows x86

pusher_py-0.1.8-cp311-cp311-manylinux_2_31_armv7l.whl (1.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ ARMv7l

pusher_py-0.1.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pusher_py-0.1.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pusher_py-0.1.8-cp310-cp310-win_arm64.whl (1.7 MB view details)

Uploaded CPython 3.10Windows ARM64

pusher_py-0.1.8-cp310-cp310-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.10Windows x86-64

pusher_py-0.1.8-cp310-cp310-win32.whl (1.5 MB view details)

Uploaded CPython 3.10Windows x86

pusher_py-0.1.8-cp310-cp310-manylinux_2_31_armv7l.whl (1.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.31+ ARMv7l

pusher_py-0.1.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pusher_py-0.1.8-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

pusher_py-0.1.8-cp39-cp39-win_arm64.whl (1.7 MB view details)

Uploaded CPython 3.9Windows ARM64

pusher_py-0.1.8-cp39-cp39-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.9Windows x86-64

pusher_py-0.1.8-cp39-cp39-win32.whl (1.5 MB view details)

Uploaded CPython 3.9Windows x86

pusher_py-0.1.8-cp39-cp39-manylinux_2_31_armv7l.whl (1.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.31+ ARMv7l

pusher_py-0.1.8-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pusher_py-0.1.8-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

Details for the file pusher_py-0.1.8-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 2193baea451a72c44dd0d856779e77be565b2312b6bbf8cf3f32fac50d9b4b46
MD5 b695e954e05b61f42e91db84e03ee5ad
BLAKE2b-256 5cd69aaf638f23ab4b6348009d0be8f38a9af2f6e9cdf59a211a568a6dcb7fa1

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1a03bbcf47e38e57a243da73c3a4d2e5c9c456746bc23fa5f75b300270ff799a
MD5 eeb859fbe61520fa79cb281562c54d57
BLAKE2b-256 0fc45b47da413ed5406cac591567f24ffd3ff8b05189187814e15c06338990df

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp314-cp314-win32.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp314-cp314-win32.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 65ec2a226edb8a94f42d3827b6f98eab771468df860e4b39cb84d94ab3732f5f
MD5 b050d28e103c00a6db3324aa15e77541
BLAKE2b-256 93664c35739919aea127ef921e9fc24508ca4bc2f06090376ae1fc24cc9309b5

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp314-cp314-manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp314-cp314-manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 20b59e2cb68a540f339f2a98e18d3742047466288ab83381805d33ff6c61b7d7
MD5 a5b72d7996a3566dd9bb2b8cffbf8c12
BLAKE2b-256 fb85cdd1ed7b9527ced83b3749ddb9de76be760b4d76fd4a05410ed940e32ef1

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 48bceee808cc9fe43b3163a3532d71907e72c66c86dad3d327e05dc564741f6b
MD5 140a395744c29f7f43a6d1bd5629f7e1
BLAKE2b-256 b82f4db7ada84ac52366a6013dfdbf45df39072ecc0fa819125fc0993922f9cc

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 331cb396c630bf794c3c3705b69d6a2a8f0889a6d3b8f74ee60f96d29bfe2efa
MD5 1abd1c079b14f0bef4548b75d3a4531d
BLAKE2b-256 f77aaaec4d50aa4b39cbc87b150b616b16f116c9c71b123c0848cbc154f12222

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 2de3417580ec453d72b57ac39be2f9b342a6870c5beca7a06f47dfde4e5506f9
MD5 2da4c872506ce5183737ee82a8a22750
BLAKE2b-256 3eaa4870c20a2e4c758a40ab66b9405a53d312647c4203e0bc06a3cdd4f9870f

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 17bc714124a05ef893538142f6257552abe0aa13d2476842560ccb5e7e21b388
MD5 e00678138d9a0607fe56c978500ce24e
BLAKE2b-256 4473cbb05c54dafc9682ec4efc746aee01dd69b601a3f3121450170c4fd3f34d

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp313-cp313-win32.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp313-cp313-win32.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 6aab63b94d6a2f17f07e434a6775af2e9aae51af520f55cb86042346770b9a12
MD5 e14f974e22cb32491e6dac50db16035c
BLAKE2b-256 5a45ea3905fed44b5a19c06dec7a01e89a3288a5b57b27ac76eacfafa8e90899

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp313-cp313-manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp313-cp313-manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 d7bed82ec50b72ed212d5839865467dc8c7f6bc3af3d88622a2507ddd25175a3
MD5 66015940735e15f09b92ef6180ec5efd
BLAKE2b-256 7f4e70ffb062399b20a34996a03e47d26c4b2a2d4ffed0ea7ad5605bf748ae39

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 3fde221f0151e8acec4ead45365c76d6c155b3cf63a22f8edc311fa27d126221
MD5 0a67f7e54907933e41893a17bdf2b126
BLAKE2b-256 fdde1224ed8e252c4c51b85b08c97c830a0206ca9003b007521bad1d176c4af1

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 0ae775af412a044fd0e4fe6ddb62a4348f2236441b648207826c02e6be01845a
MD5 d809cf82db4f5b9cf0d72c21e7d78b08
BLAKE2b-256 b10e59342bf67dc3b8f44b2c9c75847a1d3513b13403f7cc3f6e7f505631ff3f

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 ed80573f91815512723915159e31850821269bfd41cdad09c70cff8c475b7885
MD5 6036666c927da4bd3e83b4d75a485759
BLAKE2b-256 6790c6d104b06da3fd17865a406fba11067b13b9d751ec48b8df9c65be6c1573

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3dcd7a127b9a44fd518bf16f1474cae782ea34dd6d0e1ab9a1c35a908d56ae76
MD5 5743b3ff60d05eed9c05190e6feb2957
BLAKE2b-256 a9232288fcb1c51a70b76c0236e8ef0251e516379169ae62f66e8b42a0a3cccc

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp312-cp312-win32.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp312-cp312-win32.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 af242d7eede05a01687cdf1b615f0cbc298a8d6adb682c08126fb944f3b89a79
MD5 d6465242aeea71a2825e84afb01c14ad
BLAKE2b-256 d71db2e260fd6cc5b9d1751d37f37feab475eca8e9005efbd22a810bd71342ed

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp312-cp312-manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp312-cp312-manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 c5df72353f7fdaff6db012265ef6fc03fa84cb6ddcc2522ae23beccb6336551a
MD5 ac78cb80d59581f87dd3dc1828b5a135
BLAKE2b-256 70d07dfd06f234419d83ec0e5de41356e1408e3454078ab29c92e43b8d56a231

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 8d9a868762eacdaba2e8993c2eb90d2ca77d20fd0efa4ad04821cc5a6d97b2e2
MD5 793b55b290f062d5cd571fe639073a5e
BLAKE2b-256 e83063ebcbfa9d1b4b40df317619744ba8ac4bafc23671613e1e4f16875ff257

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 0cbcc37ad0e155050a1ba33e0a2745d90ec4f82dd5422e4e77c22c56419366bf
MD5 0160aa8a1c5162ccb0ecb0ca5f19d63d
BLAKE2b-256 e16aef7104faa4594f10620a907e7d263936b26aaa260535a937b02b491f3010

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 30392d8f2fd9fe93d8ffbf4ec8f56d1d3ec314c5f1e5da4af6de5cb3304ec434
MD5 c7cd736274564e3842a9c9bf13fd11cd
BLAKE2b-256 49d1dcbce6c423409a46e711dbca2846ce45f0c0fe065ae1941535520261cad2

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1187c934cd15da7d3e46b3e3bcedf6b610728b40d29ee014a9a12a42da97da1b
MD5 2b3f7ce92a5ef174f4ef08ad462d884c
BLAKE2b-256 9e266c919b8522ad6d76c2054ab885b36a2eec37d09942322b11f63e31d967b5

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp311-cp311-win32.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp311-cp311-win32.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 ea30f0ddf564c8456fab3d5176b3834b21a33473aa4bcca3db7e1519d064f87e
MD5 ef8eebb624e3d57ecf98c2bdb8da93e7
BLAKE2b-256 c35d011f6af55b5286f396229a67130ee1cbdabb70d8eeb1cfe9d03013e8aeaa

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp311-cp311-manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp311-cp311-manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 ba6c30414afdaaff98f80a22a46abd8ba164331aa6773f224cbbf60bffa56f7e
MD5 369fe5ed1d78b5e9024764aa7ef60d15
BLAKE2b-256 ac5fd85706f4cdeb9adab2ceaf02f5d9542c20303457094a968d8e1ae7aa3db2

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 8550055cb8005c68969241a7a88102710352cfb58372a48ea6c12040391252d4
MD5 43d5ec02370e4845be2c85ff3051c6cf
BLAKE2b-256 ae3f5ccc077f23edb22a553177c8afe2bfb43bcac428797bbfbed6c4d8ac9611

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 b16f946e2d87f78063cb86d9ee160d7342fb7ecfb898e1f82d47870636197065
MD5 94ef76f85a277955c1969ee60caec5d5
BLAKE2b-256 9382e0b5eee1af9ee34311f2311f80e123f0cec67bed27e9bf9603a36bcc6a72

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp310-cp310-win_arm64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.10, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 755ee55c86c14c38a3e50a9ae45eaa060d3953eeb36cf9e36bd328b58cb0231d
MD5 d5384c24dc72eca3d08a3c817cbb5376
BLAKE2b-256 de3f7719ff82608f5c0bd7302e3eea3cda0a3cc9351b1a110655d8e0900a6e87

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f1c14787de110628a47c13ae49f6913d0f345de8a900558f2173ffc3761ed039
MD5 e23867ca5d7c0712c08597a26042f5de
BLAKE2b-256 3f0061deef384f0ac922df9d26b39e608629883a3b3b40d7e7dbb10df0b68bd0

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp310-cp310-win32.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp310-cp310-win32.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 6329a5caeea4fd2dbd97d2b9ecacbdfa9fc37f6d820f909eaa997cc91aff5bc8
MD5 b8862886a6aca0bbff73ea161edad016
BLAKE2b-256 6e8b89c525deb565d8b4e58114eb967750239b53425fc4e0981fa08aaa373d4f

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp310-cp310-manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp310-cp310-manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 9fda15d3caa92d26a518e7ae1b4d6d8451267f706fcdebfbb07306ed3a47b22b
MD5 bbb51a43a902d1585fe4d23377ad2af1
BLAKE2b-256 47ccfb09a19a3e01c05da8bb0999a24eb4ca3bf305feda3ebef69bb85e482f80

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 8c33f9adbf5685bf8b348ca94d419331e70ad43a07ea5ec3ba62b2dddae91ee8
MD5 caaaa9009c6b8c63fedafe3f19d4d8dd
BLAKE2b-256 4b84f59c36e4de2e3c7855bf55c13e4bbd521610d0344c519c085fc768f5d074

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 c21f50c12e183fddf5207112eaecc181fb82e495a7b647449818e157216bf1ba
MD5 eaaf9dc2ef24c4b12cb5c8d2d549714c
BLAKE2b-256 03d8219599b7aecffc9f756c0244f860f595f3ecf58a2fff860db1b81172b710

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp39-cp39-win_arm64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp39-cp39-win_arm64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.9, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 4128a4e972303ce827e5842a64bc3b16cd13942808ff0b51db20ddbfb9c89008
MD5 871f27ce2a57e7e85ea45a21639206db
BLAKE2b-256 16fc86e791a2bb85f3ac976b48dd2eda2832f68543add2af063937ef81a6b9e8

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f54671bc19b974ee8b5d22b3fc59dfc22b48c5caa8197835740828a2a02b3ab0
MD5 595ba0d1d6327bed92609e1d21f8fcb7
BLAKE2b-256 6c453ccb50813372a9b7ea3e4be0d56f52fec364b4c3cd64575cf69c70e404c2

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp39-cp39-win32.whl.

File metadata

  • Download URL: pusher_py-0.1.8-cp39-cp39-win32.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pusher_py-0.1.8-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 c4591b27be117a389981984c8843d31725874974e8f170e3c5676c4d421ff8bf
MD5 79946231f82e3ebf1720c44b76c6863f
BLAKE2b-256 db6b915f01217ea9322bdf5613e96f74abb0dd93084ba6946fee2dbdf5b24d03

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp39-cp39-manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp39-cp39-manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 f5951d6ce9f7761f695bbdd3e915e760b3bad30eea15c8652d6349bca422ead0
MD5 f331f6304534a196f17a71d059e3214a
BLAKE2b-256 eab6d7becde6af2dc41dbf844b9459dbdadd836c1fc1ba44ba4665f74504d88b

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 d71838ecbaa11c8b7afabc14b13edda7650fe86cdd19fae62b906381090af603
MD5 15459d3c7a7052d913fefd0b01042732
BLAKE2b-256 49a6be4451345edb0810f2b288859852bafb577d0b4a0865510f780994306849

See more details on using hashes here.

File details

Details for the file pusher_py-0.1.8-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for pusher_py-0.1.8-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 6520420e26778c960a6541b928b221ef037c68c3a9114770f9a9388e2df6fe65
MD5 790a5bcbb91e5283ded1e529ad011060
BLAKE2b-256 8e72979b5bc1003caad1fd02fb42726bd2bf996507a4245220061127535d0182

See more details on using hashes here.

Supported by

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