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.2
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.2.tar.gz | 2.7 MB | Without provenance | Details |
Built distributions (wheels)
Total release size: 90.4 MB
Release files / serc-0.1.2.tar.gz
| Download URL | serc-0.1.2.tar.gz |
|---|---|
| Size | 2.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c421c298e6d7bd60cee93c4aeef12aa90aa1f2ca5b758cae312f14e504bd41e6
|
|
BLAKE2b-256 checksum How to use checksums |
af637a9e9e09b359b7e73d37c066c2e9c31c92e6177743a6a1af9fb11ff1cd75
|
| 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.2-py3-none-win_arm64.whl
| Download URL | serc-0.1.2-py3-none-win_arm64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
50f66b3c25a318109e5dff9da49f040e7489e49de52fc6082de5ab59255cd4f3
|
|
BLAKE2b-256 checksum How to use checksums |
a58e6f409652739dc35d490e8b96d1555a98e876f7a95f7d479690fdc80c022c
|
| 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.2-py3-none-win_amd64.whl
| Download URL | serc-0.1.2-py3-none-win_amd64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
210596c74d6d3ed1b16ac68dc012ce125fa9799c80f4492372b7f6b4fe6051bc
|
|
BLAKE2b-256 checksum How to use checksums |
860a6c6e544e778145445bbf0736ef8e8d043745721b7a02c3d9e8b84114261c
|
| 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.2-py3-none-win32.whl
| Download URL | serc-0.1.2-py3-none-win32.whl |
|---|---|
| Size | 4.7 MB |
| Tags | Python 3 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
e79951d980655fb16ea2b150188972cb2483a389871ea0feb41f610542a82306
|
|
BLAKE2b-256 checksum How to use checksums |
5909d09cbd7570fd4c74d38d281fdd65774a420cf5237179665fa100ed502fb9
|
| 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.2-py3-none-musllinux_1_1_x86_64.whl
| Download URL | serc-0.1.2-py3-none-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.0 MB |
| Tags | Linux musl 1.1+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
16f1a352a1d9308bbe27ac945ead5ec7d0cac6827a4256d33d361c91e1688274
|
|
BLAKE2b-256 checksum How to use checksums |
3e7df3341e1f9bac53e93058ff9f37ef84d40d7fa5ca48d05238d1e1b4273503
|
| 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.2-py3-none-musllinux_1_1_riscv64.whl
| Download URL | serc-0.1.2-py3-none-musllinux_1_1_riscv64.whl |
|---|---|
| Size | 5.2 MB |
| Tags | Linux musl 1.1+ RISC-V 64 Python 3 |
|
SHA-256 checksum How to use checksums |
cd162f9d88e1321258ca4d016180354d316d23949d097eb7d3bd551aeb160c48
|
|
BLAKE2b-256 checksum How to use checksums |
30540427a071e413201eadbab782abe04a40e0c536bf9ab9f8de0e55a13dca85
|
| 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.2-py3-none-musllinux_1_1_i686.whl
| Download URL | serc-0.1.2-py3-none-musllinux_1_1_i686.whl |
|---|---|
| Size | 4.9 MB |
| Tags | Linux musl 1.1+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
35922739072b161c354db5cafe123578cca3117b45e8ff38847c58c40e578060
|
|
BLAKE2b-256 checksum How to use checksums |
0892e5952b367ac10f2818fd022ddfeb0e81561d30f1b8fa3d5b661f7d853150
|
| 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.2-py3-none-musllinux_1_1_armv7l.whl
| Download URL | serc-0.1.2-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 |
e9171d5b02d47d87c60d965a2e4ffd33b2a1087cfb9b354bfefefbe991d7fd6a
|
|
BLAKE2b-256 checksum How to use checksums |
5408480cd79d263427ecf3d04d38876f656dec468e71eada64b4455068a55ab6
|
| 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.2-py3-none-musllinux_1_1_aarch64.whl
| Download URL | serc-0.1.2-py3-none-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | Linux musl 1.1+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
77afb4285fb01e60faac29f1ca5af5bd756994142dc25c48208bcd659c8156e3
|
|
BLAKE2b-256 checksum How to use checksums |
8374d77a10b9a163be96beea33b9c56ad136a3b556ec72b5d3b95a01a95160f0
|
| 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.2-py3-none-manylinux_2_31_riscv64.whl
| Download URL | serc-0.1.2-py3-none-manylinux_2_31_riscv64.whl |
|---|---|
| Size | 5.0 MB |
| Tags | Linux glibc 2.31+ RISC-V 64 Python 3 |
|
SHA-256 checksum How to use checksums |
1e4f06238b5d70624e7c3e278a8b1479956bad17e35a3fdf5ab84b5e98879d8e
|
|
BLAKE2b-256 checksum How to use checksums |
db71a294790bd50a839575010653c2656ef3935f949b62565c88c1b3ff98a868
|
| 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.2-py3-none-manylinux_2_28_aarch64.whl
| Download URL | serc-0.1.2-py3-none-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
ba7ecb38e5f94574578d3ff0f1c8c8b0c29da47ccb7b122a3cee8a69e0f1ff4b
|
|
BLAKE2b-256 checksum How to use checksums |
ec4c354a908c48915d585c91f77be4703739a78d2b25fe9a0aa522c7e7d0cf65
|
| 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.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | serc-0.1.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
a1c961124311af97468ef4acaf4efb478c922681f844103f3286ffaf0dca18ec
|
|
BLAKE2b-256 checksum How to use checksums |
0f7d23d748d2f23051d23832b7a8c148cc79bfced5e2e3020fc78e2f892d9ac8
|
| 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.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl
| Download URL | serc-0.1.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl |
|---|---|
| Size | 5.5 MB |
| Tags | Linux glibc 2.17+ IBM System/390x Python 3 |
|
SHA-256 checksum How to use checksums |
58cbdf2200ed49766e3c801418b0c4bef189b053076b8fe24cf893903c046393
|
|
BLAKE2b-256 checksum How to use checksums |
daa0d51916e4a791c00e9d110a03dd834f6e2711bb155c7db459499a822dd639
|
| 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.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
| Download URL | serc-0.1.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl |
|---|---|
| Size | 5.3 MB |
| Tags | Linux glibc 2.17+ PowerPC 64-le Python 3 |
|
SHA-256 checksum How to use checksums |
35f223faf85a9d4e5825b276ef24053cc79dcce1237499ee39d5c25b908363fe
|
|
BLAKE2b-256 checksum How to use checksums |
6b417053b88ec5eb0ff8be214dea36d5cde6d172909e914fc7cc83483cb8f4fd
|
| 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.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | serc-0.1.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 5.0 MB |
| Tags | Linux glibc 2.17+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
e5ba5b8b5496ee21dc41bbce688b82c47049b9bb6438ee76e4b6096f18b1adde
|
|
BLAKE2b-256 checksum How to use checksums |
7e396313c72e797d9e4cd640e41c7a43cfb21d4ba39e18d678205954b81e4b1a
|
| 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.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | serc-0.1.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 4.7 MB |
| Tags | Linux glibc 2.17+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
b20562a8f7c8d2d6a735d9f330d02290b7404d5a68df243300044898f9e73baf
|
|
BLAKE2b-256 checksum How to use checksums |
14afc09e4ce75bbbe03bc76e7802087e51b29d699443469cde1a7a19095c8066
|
| 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.2-py3-none-macosx_11_0_arm64.whl
| Download URL | serc-0.1.2-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 |
ea7df6c023f3bf7396c06d24d7db5cde9f863626a951d52a4018a5997e92288c
|
|
BLAKE2b-256 checksum How to use checksums |
59a985a2a2c1e3ba5a881f7af5febd832b0502562691c26a7d4ba90d5c546183
|
| 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.2-py3-none-macosx_10_12_x86_64.whl
| Download URL | serc-0.1.2-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 |
d80843c43697322f9815789e8a5ffb8295b04185b85a69abccf918cdaf93ee60
|
|
BLAKE2b-256 checksum How to use checksums |
b0ac7bdbe3d62821f758230cb084d9163d5df2769a29b26df5b6b6ffe2910c32
|
| 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.2-py3-none-linux_armv6l.whl
| Download URL | serc-0.1.2-py3-none-linux_armv6l.whl |
|---|---|
| Size | 4.9 MB |
| Tags | Python 3 linux armv6l |
|
SHA-256 checksum How to use checksums |
b1bc4bbcbad11141d12468e4d6e1de6dac656e153b22138aa272dc3e840c5621
|
|
BLAKE2b-256 checksum How to use checksums |
25849fc36eb2237b05b2a9588848ade35871003b02bd402d1e5cc2fff5050bb0
|
| 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.2
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.