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.3
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.3.tar.gz | 2.8 MB | Without provenance | Details |
Built distributions (wheels)
Total release size: 92.3 MB
Release files / serc-0.1.3.tar.gz
| Download URL | serc-0.1.3.tar.gz |
|---|---|
| Size | 2.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b13c11ad73db264c3205cccb78b1eacadb5f33208616079c41fe33d56720f407
|
|
BLAKE2b-256 checksum How to use checksums |
6578698679355ffd8d1013b668c224ccfc1b866e74488b6bfb51ea3142c651fb
|
| 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.3-py3-none-win_arm64.whl
| Download URL | serc-0.1.3-py3-none-win_arm64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
a111b30c856854820b2ef94cbcbce6a7c8ca1402b5f225c3499b10fc8a8a2f6f
|
|
BLAKE2b-256 checksum How to use checksums |
79691214ea2150c34997a671cb710d11c2b533048016e87b579cbe9cfa04ad04
|
| 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.3-py3-none-win_amd64.whl
| Download URL | serc-0.1.3-py3-none-win_amd64.whl |
|---|---|
| Size | 5.0 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d74344426b47de3a757955ad8ab28f0112ac0c0f108139783b28ded8fa0dcf41
|
|
BLAKE2b-256 checksum How to use checksums |
05426e9070d54216f097f0562ba2fe663269bdfbce3363d65149e848247f4b37
|
| 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.3-py3-none-win32.whl
| Download URL | serc-0.1.3-py3-none-win32.whl |
|---|---|
| Size | 4.8 MB |
| Tags | Python 3 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
9daf9712649afae6c25ab40235a411157860aae86606ebe28a213d373f541c39
|
|
BLAKE2b-256 checksum How to use checksums |
14578056be5058e34aa4b5e08d0e6f7057b4b267cc561117a6acd679cb789263
|
| 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.3-py3-none-musllinux_1_1_x86_64.whl
| Download URL | serc-0.1.3-py3-none-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | Linux musl 1.1+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
49acbe8f489f0cc2e93465fd746f21750180c635a2c44205d16ad4d6d7ea7683
|
|
BLAKE2b-256 checksum How to use checksums |
e03867846386e93ab89c4ee666e6fa2d555464e93d909180aa8d0e02485255cc
|
| 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.3-py3-none-musllinux_1_1_riscv64.whl
| Download URL | serc-0.1.3-py3-none-musllinux_1_1_riscv64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | Linux musl 1.1+ RISC-V 64 Python 3 |
|
SHA-256 checksum How to use checksums |
d7e4cebbcc10a099ffd93198b7178b9f044f71546650e58b51fa440dfe92e449
|
|
BLAKE2b-256 checksum How to use checksums |
b92d88fbefcdb49cc11ba7717c2a2096f9de702a7e0060934551d52f14e1e8a2
|
| 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.3-py3-none-musllinux_1_1_i686.whl
| Download URL | serc-0.1.3-py3-none-musllinux_1_1_i686.whl |
|---|---|
| Size | 5.0 MB |
| Tags | Linux musl 1.1+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
927235401a987faac0306310c50ecf07020a3d60b4292d9f92503125de309ebc
|
|
BLAKE2b-256 checksum How to use checksums |
bcd9619f4e43416a53acb6ae612528f055aa48883787b130f5e866d2e06e2069
|
| 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.3-py3-none-musllinux_1_1_armv7l.whl
| Download URL | serc-0.1.3-py3-none-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 4.8 MB |
| Tags | Linux musl 1.1+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
89765150fb2cb22a36cc33162dde0f6321f97fd23a61468fb056578627f4dbdf
|
|
BLAKE2b-256 checksum How to use checksums |
37593eba1adaa29deaaa8f7e84fdaedc40a473ad320060593e056dc833ab67bf
|
| 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.3-py3-none-musllinux_1_1_aarch64.whl
| Download URL | serc-0.1.3-py3-none-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | Linux musl 1.1+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
ce8dddeffc4c5ad31ee0108f17d9e5357996ca5f681a0dbb711431230b59e503
|
|
BLAKE2b-256 checksum How to use checksums |
6e6dd9a1548a141e0b8e8b2e6c4731c22fe304f2aa4e9a299ed029912111a10f
|
| 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.3-py3-none-manylinux_2_31_riscv64.whl
| Download URL | serc-0.1.3-py3-none-manylinux_2_31_riscv64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | Linux glibc 2.31+ RISC-V 64 Python 3 |
|
SHA-256 checksum How to use checksums |
7728a85e199e28ea08b1dd470482f7ebbbd9ed1359853f5852a9c8b0389488b2
|
|
BLAKE2b-256 checksum How to use checksums |
33d210efac6b35b71a031d8b8a5705626ec6c195a4e3017121c792298e8943d2
|
| 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.3-py3-none-manylinux_2_28_aarch64.whl
| Download URL | serc-0.1.3-py3-none-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
45bb8abeada0e77f994899faf13f26acbe17beb56b120894ad406204b800465d
|
|
BLAKE2b-256 checksum How to use checksums |
4f68a620121fb1851e434abbed0f593d859db51dab68afb72c396192b47e51db
|
| 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.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | serc-0.1.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.0 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
1d9f55905988a36f118f6c599f6786c729301378ea16fc8a8e7bcd7c29bcf468
|
|
BLAKE2b-256 checksum How to use checksums |
e5dd5941449b5d7fc9799c32269bab32caace772d9a8af07665213240049fb08
|
| 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.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
| Download URL | serc-0.1.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl |
|---|---|
| Size | 5.6 MB |
| Tags | Linux glibc 2.17+ IBM System/390x Python 3 |
|
SHA-256 checksum How to use checksums |
8dd825ccbeb32fe1931d9daf74d0443940685a2c75345429c838adf83ca957c7
|
|
BLAKE2b-256 checksum How to use checksums |
56d4ad9909f75dd6f119a569ff226e229b5e2fa70135a5a3360446c5f9892df5
|
| 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.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
| Download URL | serc-0.1.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl |
|---|---|
| Size | 5.4 MB |
| Tags | Linux glibc 2.17+ PowerPC 64-le Python 3 |
|
SHA-256 checksum How to use checksums |
8cd99f60a89567d6e2afda685ec43ac119fd215e65e5c7ce98990488ecd8543b
|
|
BLAKE2b-256 checksum How to use checksums |
c364942bfd19042a3b2cca290a83cfc11b902f3ee78f0ece36160b3fece7b30f
|
| 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.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | serc-0.1.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 5.1 MB |
| Tags | Linux glibc 2.17+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
c0efb7306942391e00bad3a799681861f5c102f31682a634fc0485aba4b5c5d1
|
|
BLAKE2b-256 checksum How to use checksums |
a3c013581ea3701070be7c6cef4265e5fc54510d6b975d301d48764f46d7bb5e
|
| 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.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | serc-0.1.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 4.8 MB |
| Tags | Linux glibc 2.17+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
eb8702530ac20ac8b2330bbe9ca2f1f0b520207a15346b03b6529956be3a9b57
|
|
BLAKE2b-256 checksum How to use checksums |
7fb9d714b6eefb035cd64ebfb47dcc625f2529a40c3710a15f104db0af556c9b
|
| 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.3-py3-none-macosx_11_0_arm64.whl
| Download URL | serc-0.1.3-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
33a1dcc621e07a9aef72d2aa7e4ffa33a280fec39285c74fbfbeff15e919c9ab
|
|
BLAKE2b-256 checksum How to use checksums |
6f59e03dfa964be4db78ae6187972146e99a41dd25312f9c4ad0badc31862eee
|
| 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.3-py3-none-macosx_10_12_x86_64.whl
| Download URL | serc-0.1.3-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
31e11599e9306ef44992811c366f4c055667d2079d57ca805499197876858c6b
|
|
BLAKE2b-256 checksum How to use checksums |
d2d0a11da3d086fc64d5f0e41e199fd5fe207eb14d33393d348a0fae3137fc6c
|
| 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.3-py3-none-linux_armv6l.whl
| Download URL | serc-0.1.3-py3-none-linux_armv6l.whl |
|---|---|
| Size | 5.0 MB |
| Tags | Python 3 linux armv6l |
|
SHA-256 checksum How to use checksums |
dcc901cf7f65cd91b1e76c9af02ecbc3472f541aed69429b3558527e90fa6590
|
|
BLAKE2b-256 checksum How to use checksums |
9af1d5c8dc549847217e22c0152fd3f3af2f37b430f83e4d35d11a718ac09fb7
|
| 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.3
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.