Serc
An experimental CPython bytecode compiler, written in Rust.
Highlights
- Compile Python source to CPython
.pycfiles without a CPython installation. - Target Python 3.12, 3.13, 3.14, and 3.15 with a single executable.
- Check source files and recursively compile packages from the command line.
- Embed the compiler via the Rust library.
In a single-worker benchmark, Serc compiled NumPy faster than CPython’s built-in bytecode compiler. Serc also produces byte-for-byte identical output on an extensive corpus of real-world Python code, including Django, Airflow, and Transformers.
| Project | Serc | CPython 3.14.5 compileall |
Speedup |
|---|---|---|---|
| NumPy 2.4.6 (505 files) | 1.194 s ± 0.023 s | 1.739 s ± 0.060 s | 1.46× |
However, Serc is also experimental, and so may emit incorrect bytecode in some cases!
Installation
Install from crates.io with Rust 1.96 or later:
cargo install serc-cli --locked
Getting started
Given hello.py:
def greet(name):
return f"Hello, {name}!"
Compile it to bytecode, emitted at __pycache__/hello.cpython-314.pyc:
serc compile hello.py
Pass a directory to compile its Python files recursively, or use --check to
compile without writing cache files:
serc compile path/to/package
serc compile --check path/to/package
Compilation uses the available CPUs by default. Use --jobs (or -j) to set a
limit, including --jobs 1 for serial compilation. You can also set the default
with RAYON_NUM_THREADS:
serc compile --jobs 4 path/to/package
Python version
Serc emits Python 3.14-compatible bytecode by default, but supports target
selection with --python-version. For example, to emit Python 3.15 bytecode:
serc compile --python-version 3.15 path/to/package
Serc supports the following CPython minor versions:
| Target | Pinned CPython release |
|---|---|
3.12 |
3.12.14 |
3.13 |
3.13.15 |
3.14 |
3.14.5 |
3.15 |
3.15.0rc2 |
Each target writes its own cache tag and bytecode magic number, so the four
versions can coexist under __pycache__.
Optimization
Use -O to remove assertions and set __debug__ to false, matching Python's
-O mode. Use -OO to additionally remove module, class, and function
docstrings:
serc compile -O hello.py
serc compile -OO hello.py
You can also select the level explicitly with --optimize 0, --optimize 1, or
--optimize 2. Level 0 is the default. Optimized caches use Python's naming
convention, such as __pycache__/hello.cpython-314.opt-1.pyc and
__pycache__/hello.cpython-314.opt-2.pyc, so all three levels can coexist.
Rust library
Add Serc to your Cargo.toml:
[dependencies]
serc = "0.1.0"
Compile Python source and serialize the resulting code object in CPython's marshal format:
let module = serc::compile("print('Hello, world!')\n", "hello.py").unwrap();
let marshaled = module.marshal();
Compilation defaults to Python 3.14. See the
library guide for selecting another Python
version and generating .pyc files.
License
Serc is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Serc by you, as defined in the Apache-2.0 license, shall be dually licensed as above, without any additional terms or conditions.
Metadata
Release files for serc 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| serc-0.1.1.tar.gz | 2.6 MB | Without provenance | Details |
Built distributions (wheels)
Total release size: 88.8 MB
Release files / serc-0.1.1.tar.gz
| Download URL | serc-0.1.1.tar.gz |
|---|---|
| Size | 2.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2f853adf74e3f5f3662d473f20880037676d67197e2650b218eef1a458b95847
|
|
BLAKE2b-256 checksum How to use checksums |
a3b2ac11a319f492a1aa351f77032a0e537516d5ca1d47cd1d787887652fa1a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-win_arm64.whl
| Download URL | serc-0.1.1-py3-none-win_arm64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
cfdc895ad215ffd7880023f7ac77570a4f0120ae943925e5214dfa185d0dc44b
|
|
BLAKE2b-256 checksum How to use checksums |
98fb47611497a4a2d3cbaf76c8b7060777a2564bb3bf3c8da10b6a4516b4fbab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-win_amd64.whl
| Download URL | serc-0.1.1-py3-none-win_amd64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f27366286a7ca626c9c3ece14c844465371a8071b968dc0398b952339839442c
|
|
BLAKE2b-256 checksum How to use checksums |
4604ae44de5b51a75f0fce660eb93d64118c12e5ec6cb66c8f98a69c7ca2c848
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-win32.whl
| Download URL | serc-0.1.1-py3-none-win32.whl |
|---|---|
| Size | 4.6 MB |
| Tags | Python 3 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
fc2ee6ca29e446dcb43f9b0fc9ca48f84fec312f2c53951518f22787851c162c
|
|
BLAKE2b-256 checksum How to use checksums |
2b354d14d760179bd955510e1f4c55faa6975d45ebb91d7e2c23a1e1d89e87d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-musllinux_1_1_x86_64.whl
| Download URL | serc-0.1.1-py3-none-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | Linux musl 1.1+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
e6491a6e0b9cc8a1c19de343692c37e2de312570ab8a76ed541b65f81d67fc3f
|
|
BLAKE2b-256 checksum How to use checksums |
a00946da280f360dae4b438f2b1079f9d9e0c71d08fd01fda4eaee813f9a23a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-musllinux_1_1_riscv64.whl
| Download URL | serc-0.1.1-py3-none-musllinux_1_1_riscv64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | Linux musl 1.1+ RISC-V 64 Python 3 |
|
SHA-256 checksum How to use checksums |
aaacd9ba0611257971505dacfcfca1b46a6c6eeee01297dde9d7b1d43b5d66cc
|
|
BLAKE2b-256 checksum How to use checksums |
afb45ed420c79552310ecf89d745cca43f33592dc09759689c140bcd410ae198
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-musllinux_1_1_i686.whl
| Download URL | serc-0.1.1-py3-none-musllinux_1_1_i686.whl |
|---|---|
| Size | 4.8 MB |
| Tags | Linux musl 1.1+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
eedd3cc060bdf0710453b677e6bedc295480b5465e89fc7bf09af6c799432471
|
|
BLAKE2b-256 checksum How to use checksums |
fad87b5d5747c5cad2f5b60cb24d2e81fda81456f7aed29488ae89858c8cc614
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-musllinux_1_1_armv7l.whl
| Download URL | serc-0.1.1-py3-none-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 4.7 MB |
| Tags | Linux musl 1.1+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
04bbdb7776ea32cf54e1791f2de1af46d8550e3e21aa70cc9d3be4d8e5d8c847
|
|
BLAKE2b-256 checksum How to use checksums |
c6e2e0ab9e0f08cca7aa1bc8a19155d65688316dbc2081a5946af91c0e156344
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-musllinux_1_1_aarch64.whl
| Download URL | serc-0.1.1-py3-none-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | Linux musl 1.1+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
79105923de89f8b002f50dbd77d3e0cc4798f02ace379877d6ae1243e513ab58
|
|
BLAKE2b-256 checksum How to use checksums |
947a40ffac9841549f5134a87f3df1ba4fedba914fe7d9e62a39abcc2cf92bb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-manylinux_2_31_riscv64.whl
| Download URL | serc-0.1.1-py3-none-manylinux_2_31_riscv64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | Linux glibc 2.31+ RISC-V 64 Python 3 |
|
SHA-256 checksum How to use checksums |
f15dfff17cc3fb7c9e5afe2e166ea04e18af9f949b4b9bc3c1ec231284f9a075
|
|
BLAKE2b-256 checksum How to use checksums |
c6f7246f8a8a8b2bd341a29e857468a53c994cb65066edf648d8b238d4a86450
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-manylinux_2_28_aarch64.whl
| Download URL | serc-0.1.1-py3-none-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
240e9ad0e9e8c3ed99f37b9d71e2d7d26492dba3cab6dda6a0d5094805481872
|
|
BLAKE2b-256 checksum How to use checksums |
8e67ca9c15a1780762b8928de3b3886b601455b61d115c24fccbb943b532c97c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | serc-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
bcb884d5862f6693eff53e990ecc8c57699e87a399a4943a2bf20db58352761f
|
|
BLAKE2b-256 checksum How to use checksums |
032b60ff2d08e4788a4d2c238d51fabb14cd4531f3aece1472b23ba1d4de0231
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
| Download URL | serc-0.1.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl |
|---|---|
| Size | 5.4 MB |
| Tags | Linux glibc 2.17+ IBM System/390x Python 3 |
|
SHA-256 checksum How to use checksums |
61c524c20ee8f239ade4d5689393d7bf23dd23b9cb501ac72066be12fef2cc70
|
|
BLAKE2b-256 checksum How to use checksums |
728dea6cf3bb9936dfddfaa7a8b7074df18245ba3fe8eb80efac37d8b5585690
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
| Download URL | serc-0.1.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl |
|---|---|
| Size | 5.2 MB |
| Tags | Linux glibc 2.17+ PowerPC 64-le Python 3 |
|
SHA-256 checksum How to use checksums |
0ec2fd43fdb14177e17adac1ca2d32dcc509b281d06621bb402450cda9728dc0
|
|
BLAKE2b-256 checksum How to use checksums |
d042120f20da5015a8ac6ef8be9644621dc52bcae5e059241cdcdf241b8fcbb3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | serc-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 4.9 MB |
| Tags | Linux glibc 2.17+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
cf127e0b654f857e3369e5427f13c70cf2dcf2192e92d44ecdb2ece282524097
|
|
BLAKE2b-256 checksum How to use checksums |
ae299a83a4549eec1cf40853eaff77f3da0f7becf0d57b90c4e890ca05ee1cf7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | serc-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 4.6 MB |
| Tags | Linux glibc 2.17+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
f52380ca59622f5ee5645441541876a5bcdc3885635c907b4bc5011176a95a8d
|
|
BLAKE2b-256 checksum How to use checksums |
fd6cb18599e6f7a30eb0cb2ed15219b78f8c819722e1fc97543dddca8fe0182a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-macosx_11_0_arm64.whl
| Download URL | serc-0.1.1-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.4 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ca23b8e9ec286af7d5788994f92840882dee6129661c115b101d6a27861b5e15
|
|
BLAKE2b-256 checksum How to use checksums |
a2742b738cfaa8000f79879560531837dd37d5605f7ae50d0c0d41f6d7997984
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-macosx_10_12_x86_64.whl
| Download URL | serc-0.1.1-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
2988246633d28b862fe6d76040a7ac5a6c1d19bf02ccca0ad17f91c2f7a54c7c
|
|
BLAKE2b-256 checksum How to use checksums |
a2fc9f627e4be7b6b81e3620293ba39dc382fed8df5e694f86f4ecb666492a4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / serc-0.1.1-py3-none-linux_armv6l.whl
| Download URL | serc-0.1.1-py3-none-linux_armv6l.whl |
|---|---|
| Size | 4.8 MB |
| Tags | Python 3 linux armv6l |
|
SHA-256 checksum How to use checksums |
5a2b73a66d06804cc3967061ce65f2b231f0cf095f159452cd219c05172f080f
|
|
BLAKE2b-256 checksum How to use checksums |
51af3691ee6f6e3a8e380375c8261e7fcf6d34a59a70ed7b80be81d1ee54b04d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for serc 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.