Skip to main content

Fast Base64 encoding/decoding

Project description

Fast Base64 implementation

license-status pypi-status python-versions Documentation Status gha-status codecov-status

This project is a wrapper on libbase64.

It aims to provide a fast base64 implementation for base64 encoding/decoding.

Installation

pip install pybase64

Usage

pybase64 uses the same API as Python base64 “modern interface” (introduced in Python 2.4) for an easy integration.

To get the fastest decoding, it is recommended to use the pybase64.b64decode and validate=True when possible.

import pybase64

print(pybase64.b64encode(b'>>>foo???', altchars='_:'))
# b'Pj4_Zm9vPz8:'
print(pybase64.b64decode(b'Pj4_Zm9vPz8:', altchars='_:', validate=True))
# b'>>>foo???'

# Standard encoding helpers
print(pybase64.standard_b64encode(b'>>>foo???'))
# b'Pj4+Zm9vPz8/'
print(pybase64.standard_b64decode(b'Pj4+Zm9vPz8/'))
# b'>>>foo???'

# URL safe encoding helpers
print(pybase64.urlsafe_b64encode(b'>>>foo???'))
# b'Pj4-Zm9vPz8_'
print(pybase64.urlsafe_b64decode(b'Pj4-Zm9vPz8_'))
# b'>>>foo???'

A command-line tool is also provided. It has encode, decode and benchmark subcommands.

usage: pybase64 [-h] [-V] {benchmark,encode,decode} ...

pybase64 command-line tool.

positional arguments:
  {benchmark,encode,decode}
                        tool help
    benchmark           -h for usage
    encode              -h for usage
    decode              -h for usage

optional arguments:
  -h, --help            show this help message and exit
  -V, --version         show program's version number and exit

Full documentation on Read the Docs.

Benchmark

Running Python 3.7.2, Apple LLVM version 10.0.0 (clang-1000.11.45.5), Mac OS X 10.14.2 on an Intel Core i7-4870HQ @ 2.50GHz

pybase64 0.5.0 (C extension active - AVX2)
bench: altchars=None, validate=False
pybase64._pybase64.encodebytes:   1734.776 MB/s (13,271,472 bytes -> 17,928,129 bytes)
pybase64._pybase64.b64encode:     4039.539 MB/s (13,271,472 bytes -> 17,695,296 bytes)
pybase64._pybase64.b64decode:     1854.423 MB/s (17,695,296 bytes -> 13,271,472 bytes)
base64.encodebytes:                 78.352 MB/s (13,271,472 bytes -> 17,928,129 bytes)
base64.b64encode:                  539.840 MB/s (13,271,472 bytes -> 17,695,296 bytes)
base64.b64decode:                  287.826 MB/s (17,695,296 bytes -> 13,271,472 bytes)
bench: altchars=None, validate=True
pybase64._pybase64.b64encode:     4156.607 MB/s (13,271,472 bytes -> 17,695,296 bytes)
pybase64._pybase64.b64decode:     4107.997 MB/s (17,695,296 bytes -> 13,271,472 bytes)
base64.b64encode:                  559.342 MB/s (13,271,472 bytes -> 17,695,296 bytes)
base64.b64decode:                  143.674 MB/s (17,695,296 bytes -> 13,271,472 bytes)
bench: altchars=b'-_', validate=False
pybase64._pybase64.b64encode:     2786.776 MB/s (13,271,472 bytes -> 17,695,296 bytes)
pybase64._pybase64.b64decode:     1124.136 MB/s (17,695,296 bytes -> 13,271,472 bytes)
base64.b64encode:                  322.427 MB/s (13,271,472 bytes -> 17,695,296 bytes)
base64.b64decode:                  205.195 MB/s (17,695,296 bytes -> 13,271,472 bytes)
bench: altchars=b'-_', validate=True
pybase64._pybase64.b64encode:     2806.271 MB/s (13,271,472 bytes -> 17,695,296 bytes)
pybase64._pybase64.b64decode:     2740.456 MB/s (17,695,296 bytes -> 13,271,472 bytes)
base64.b64encode:                  314.709 MB/s (13,271,472 bytes -> 17,695,296 bytes)
base64.b64decode:                  121.803 MB/s (17,695,296 bytes -> 13,271,472 bytes)

Changelog

1.1.4

  • Add macOS arm64 wheel

1.1.3

  • GitHub Actions: fix build on tag

1.1.2

  • Add PyPy wheels

  • Add aarch64, ppc64le & s390x manylinux wheels

1.1.1

  • Move CI from TravisCI/AppVeyor to GitHub Actions

  • Fix publication of Linux/macOS wheels

1.1.0

  • Add b64encode_as_string, same as b64encode but returns a str object instead of a bytes object

  • Add b64decode_as_bytearray, same as b64decode but returns a bytarray object instead of a bytes object

  • Speed-Up decoding from UCS1 strings

1.0.2

  • Update base64 library

  • Publish python 3.9 wheels

1.0.1

  • Publish python 3.8 wheels

1.0.0

  • Drop python 3.4 support

  • Drop python 2.7 support

0.5.0

  • Publish python 3.7 wheels

  • Drop python 3.3 support

0.4.0

  • Speed-up decoding when validate==False

0.3.1

  • Fix deployment issues

0.3.0

  • Add encodebytes function

0.2.1

  • Fixed invalid results on Windows

0.2.0

  • Added documentation

  • Added subcommands to the main script:

    • help

    • version

    • encode

    • decode

    • benchmark

0.1.2

  • Updated base64 native library

0.1.1

  • Fixed deployment issues

0.1.0

  • First public release

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

pybase64-1.1.4.tar.gz (110.0 kB view hashes)

Uploaded Source

Built Distributions

pybase64-1.1.4-pp37-pypy37_pp73-win32.whl (39.2 kB view hashes)

Uploaded PyPy Windows x86

pybase64-1.1.4-pp37-pypy37_pp73-manylinux2010_x86_64.whl (41.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ x86-64

pybase64-1.1.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (37.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pybase64-1.1.4-pp36-pypy36_pp73-win32.whl (39.2 kB view hashes)

Uploaded PyPy Windows x86

pybase64-1.1.4-pp36-pypy36_pp73-manylinux2010_x86_64.whl (41.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ x86-64

pybase64-1.1.4-pp36-pypy36_pp73-macosx_10_9_x86_64.whl (37.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pybase64-1.1.4-cp39-cp39-win_amd64.whl (42.0 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

pybase64-1.1.4-cp39-cp39-win32.whl (39.2 kB view hashes)

Uploaded CPython 3.9 Windows x86

pybase64-1.1.4-cp39-cp39-manylinux2014_x86_64.whl (170.6 kB view hashes)

Uploaded CPython 3.9

pybase64-1.1.4-cp39-cp39-manylinux2014_s390x.whl (67.8 kB view hashes)

Uploaded CPython 3.9

pybase64-1.1.4-cp39-cp39-manylinux2014_ppc64le.whl (70.7 kB view hashes)

Uploaded CPython 3.9

pybase64-1.1.4-cp39-cp39-manylinux2014_i686.whl (157.9 kB view hashes)

Uploaded CPython 3.9

pybase64-1.1.4-cp39-cp39-manylinux2014_aarch64.whl (87.0 kB view hashes)

Uploaded CPython 3.9

pybase64-1.1.4-cp39-cp39-manylinux1_x86_64.whl (170.6 kB view hashes)

Uploaded CPython 3.9

pybase64-1.1.4-cp39-cp39-manylinux1_i686.whl (157.9 kB view hashes)

Uploaded CPython 3.9

pybase64-1.1.4-cp39-cp39-macosx_11_0_arm64.whl (35.6 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

pybase64-1.1.4-cp39-cp39-macosx_10_9_x86_64.whl (39.0 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pybase64-1.1.4-cp38-cp38-win_amd64.whl (42.0 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

pybase64-1.1.4-cp38-cp38-win32.whl (39.2 kB view hashes)

Uploaded CPython 3.8 Windows x86

pybase64-1.1.4-cp38-cp38-manylinux2014_x86_64.whl (171.1 kB view hashes)

Uploaded CPython 3.8

pybase64-1.1.4-cp38-cp38-manylinux2014_s390x.whl (68.3 kB view hashes)

Uploaded CPython 3.8

pybase64-1.1.4-cp38-cp38-manylinux2014_ppc64le.whl (71.4 kB view hashes)

Uploaded CPython 3.8

pybase64-1.1.4-cp38-cp38-manylinux2014_i686.whl (158.4 kB view hashes)

Uploaded CPython 3.8

pybase64-1.1.4-cp38-cp38-manylinux2014_aarch64.whl (87.5 kB view hashes)

Uploaded CPython 3.8

pybase64-1.1.4-cp38-cp38-manylinux1_x86_64.whl (171.1 kB view hashes)

Uploaded CPython 3.8

pybase64-1.1.4-cp38-cp38-manylinux1_i686.whl (158.4 kB view hashes)

Uploaded CPython 3.8

pybase64-1.1.4-cp38-cp38-macosx_10_9_x86_64.whl (39.0 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pybase64-1.1.4-cp37-cp37m-win_amd64.whl (41.9 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

pybase64-1.1.4-cp37-cp37m-win32.whl (39.1 kB view hashes)

Uploaded CPython 3.7m Windows x86

pybase64-1.1.4-cp37-cp37m-manylinux2014_x86_64.whl (170.9 kB view hashes)

Uploaded CPython 3.7m

pybase64-1.1.4-cp37-cp37m-manylinux2014_s390x.whl (68.3 kB view hashes)

Uploaded CPython 3.7m

pybase64-1.1.4-cp37-cp37m-manylinux2014_ppc64le.whl (71.2 kB view hashes)

Uploaded CPython 3.7m

pybase64-1.1.4-cp37-cp37m-manylinux2014_i686.whl (158.2 kB view hashes)

Uploaded CPython 3.7m

pybase64-1.1.4-cp37-cp37m-manylinux2014_aarch64.whl (87.6 kB view hashes)

Uploaded CPython 3.7m

pybase64-1.1.4-cp37-cp37m-manylinux1_x86_64.whl (170.9 kB view hashes)

Uploaded CPython 3.7m

pybase64-1.1.4-cp37-cp37m-manylinux1_i686.whl (158.2 kB view hashes)

Uploaded CPython 3.7m

pybase64-1.1.4-cp37-cp37m-macosx_10_9_x86_64.whl (38.9 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pybase64-1.1.4-cp36-cp36m-win_amd64.whl (41.9 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

pybase64-1.1.4-cp36-cp36m-win32.whl (39.1 kB view hashes)

Uploaded CPython 3.6m Windows x86

pybase64-1.1.4-cp36-cp36m-manylinux2014_x86_64.whl (170.1 kB view hashes)

Uploaded CPython 3.6m

pybase64-1.1.4-cp36-cp36m-manylinux2014_s390x.whl (67.4 kB view hashes)

Uploaded CPython 3.6m

pybase64-1.1.4-cp36-cp36m-manylinux2014_ppc64le.whl (70.3 kB view hashes)

Uploaded CPython 3.6m

pybase64-1.1.4-cp36-cp36m-manylinux2014_i686.whl (157.4 kB view hashes)

Uploaded CPython 3.6m

pybase64-1.1.4-cp36-cp36m-manylinux2014_aarch64.whl (86.7 kB view hashes)

Uploaded CPython 3.6m

pybase64-1.1.4-cp36-cp36m-manylinux1_x86_64.whl (170.1 kB view hashes)

Uploaded CPython 3.6m

pybase64-1.1.4-cp36-cp36m-manylinux1_i686.whl (157.4 kB view hashes)

Uploaded CPython 3.6m

pybase64-1.1.4-cp36-cp36m-macosx_10_9_x86_64.whl (38.9 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

pybase64-1.1.4-cp35-cp35m-win_amd64.whl (41.9 kB view hashes)

Uploaded CPython 3.5m Windows x86-64

pybase64-1.1.4-cp35-cp35m-win32.whl (39.1 kB view hashes)

Uploaded CPython 3.5m Windows x86

pybase64-1.1.4-cp35-cp35m-manylinux2014_x86_64.whl (169.9 kB view hashes)

Uploaded CPython 3.5m

pybase64-1.1.4-cp35-cp35m-manylinux2014_s390x.whl (67.1 kB view hashes)

Uploaded CPython 3.5m

pybase64-1.1.4-cp35-cp35m-manylinux2014_ppc64le.whl (70.1 kB view hashes)

Uploaded CPython 3.5m

pybase64-1.1.4-cp35-cp35m-manylinux2014_i686.whl (157.2 kB view hashes)

Uploaded CPython 3.5m

pybase64-1.1.4-cp35-cp35m-manylinux2014_aarch64.whl (86.5 kB view hashes)

Uploaded CPython 3.5m

pybase64-1.1.4-cp35-cp35m-manylinux1_x86_64.whl (169.9 kB view hashes)

Uploaded CPython 3.5m

pybase64-1.1.4-cp35-cp35m-manylinux1_i686.whl (157.2 kB view hashes)

Uploaded CPython 3.5m

pybase64-1.1.4-cp35-cp35m-macosx_10_9_x86_64.whl (38.9 kB view hashes)

Uploaded CPython 3.5m macOS 10.9+ x86-64

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