This release is a pre-release and may not be stable for production use.
UC2 for Python
Read and create UltraCompressor II archives using the native UC2 library. The package also includes the UC2 command-line program for listing, extraction, archive creation, and stream ingestion. Wheels contain the native code; no separate UC2 install or compiler is needed when a wheel is available.
This is an alpha release. It supports the implemented legacy Huffman methods,
master dictionaries, directories, stored versions, and UC2 v3 rANS entries.
Turbo/method 80 is supported for reading. Multi-volume sets require reassembly. Use UC2File for reading and UC2Writer for creation.
Install and read
python -m pip install --pre uc2
uc2 -l archive.uc2
python -m uc2 -t archive.uc2
Wheels support CPython 3.10-3.14 on Linux x86-64 (glibc), Windows x86-64, and Intel/Apple Silicon macOS.
from uc2 import UC2File
with UC2File("archive.uc2") as archive:
for info in archive.infolist():
print(info.filename, info.file_size, info.version)
contents = archive.read("notes.txt")
archive.verify()
archive.extractall("restored")
The constructor accepts a path or a seekable binary file, including BytesIO.
Caller-owned files stay open; their seek position changes. Keep the source
unchanged while the archive is open. Each thread should use its own UC2File.
infolist() and namelist() return the newest version of each path by default.
Use infolist(all_versions=True) to include older entries. A literal semicolon
in a filename remains part of the name:
with UC2File("archive.uc2") as archive:
newest = archive.read("notes.txt")
older = archive.read("notes.txt", version=1)
literal_name = archive.read("notes.txt;1")
UC2Info records the name, uncompressed and compressed sizes, DOS timestamp
(a naive datetime, or None if invalid), attributes, method, version, and
is_dir(). The dos_time field retains the original 32-bit timestamp, including
invalid date encodings. Metadata objects can be passed directly to read, extract, and
copy_to. They belong to the archive that produced them.
Preserve a collection
uc2-preserve old-archives -o inventory
uc2-preserve old-archives -o migrated --format zip
uc2-preserve old-archives -o migrated-tar --format tar
Each command requires a new output directory. Inputs can be individual archives or directories. Every stored version is decoded and checked, and manifests record original paths, raw timestamps, attributes and SHA-256 hashes. Exports use separate numbered paths for each entry, so old versions and case variants cannot overwrite each other. Generated ZIP/tar files are reopened and their contents verified. Failed entries are recorded and omitted from exports; a partial batch returns exit status 1. Sources are read-only.
The Python API is uc2.preserve.preserve(inputs, output, format="zip").
See the preservation guide
for limits, manifest fields and metadata conversion details. The
browser reader handles individual
archives without a Python installation.
Limits and extraction
Defaults are 100,000 entries, 64 MiB of decoder allocations, 64 MiB per read,
1 GiB per streamed file, and 1 GiB total per extractall or verify call.
Constructor keywords are max_entries, max_decoder_memory, max_read_size,
max_extract_size, and max_total_size. They must be positive integers.
The decoder limit excludes Python metadata and caller-owned buffers. Archive
offsets and this reader are limited to 32 bits. These limits are not a CPU-time
sandbox for hostile input.
copy_to(member, binary_file) decodes without collecting the file in memory.
Its output may be partial if decoding or writing fails. extract and
extractall instead stage each file and install it after its UC2 checksum
passes. Existing files are preserved unless overwrite=True is supplied.
Earlier successfully extracted files remain if a later member fails.
Extraction rejects absolute paths, traversal, reserved Windows names, control characters, ambiguous case-folded names, and links below the destination. It uses file-descriptor-relative operations without following links on POSIX. Windows checks links and reparse points; use a destination that other processes cannot modify during extraction. The explicitly chosen destination itself may be a symlink. POSIX files use mode 0600 and directories use 0755, both masked by the process umask. Archived permissions and timestamps are exposed as metadata but not applied.
Errors include BadArchiveError, ResourceLimitError, UnsafePathError, and
ordinary Python I/O exceptions. Verification uses the archive's legacy
checksums, which are not cryptographic authentication. A missing entry or
version raises KeyError.
Create archives
from io import BytesIO
from uc2 import UC2Writer
with UC2Writer("backup.uc2", level=4) as archive:
archive.write("project", arcname="source") # recursive directory tree
archive.mkdir("empty-directory")
archive.writestr("notes.txt", "Saved from Python\n".encode("utf-8"))
archive.write_stream("data.bin", BytesIO(b"streamed bytes"))
The destination is a filesystem path. A successful close() replaces it using
an exclusively created sibling temporary file and os.replace. An exception,
abort(), or a failed add/close leaves an existing destination intact. Any
failed add aborts the writer; start a new one to retry. Destruction discards
uncommitted work. The containing directory must exist and remain under the
caller's control. Atomic replacement is not a guarantee of survival after a
power failure. Replacement creates a new file with temporary-file permissions
(normally 0600 on POSIX), without preserving destination permissions.
write(path, arcname=None) adds a regular file or recursively adds a directory.
The default archive name is the input's basename. Symlinks, reparse points,
and special files are rejected. Keep the source tree unchanged while reading.
mkdir(name) creates missing parents; repeated directories retain their first
metadata. writestr(name, data) accepts bytes, bytearray, or memoryview; encode
text explicitly. write_stream(name, source, size=None) consumes read(n)
through EOF without seeking and leaves the input open. A supplied size must
match exactly; detecting excess input can consume one extra byte.
Inputs spool to anonymous temporary files as they are added. Compression runs at close, using CDC-selected custom master dictionaries. Payload buffers have fixed sizes; metadata grows with entries and chunks. Temporary disk space covers the uncompressed inputs and completed archive, plus the destination's sibling temporary file during the final copy. Duplicate file paths store versions: the last added version is newest. Directories cannot conflict with files. Independent writer objects may run separately; one object rejects concurrent or reentrant use.
Writer limits and metadata:
level=4by default; 2-5 use legacy Huffman and 6-9 use v3 rANS.max_entries=100_000, configurable from 1 through 1,000,000, includes automatic parent directories.max_total_size=0xFFFFFFFFbounds all input bytes combined and may be reduced. Each file and the completed archive also fit 32 bits.- The central directory is limited to 64 MiB and the CDC index to 1,048,576 chunks. Directories may nest 64 levels deep. These are format/API limits, not CPU limits.
- Archive paths use
/. Components must be representable in CP850, fit 255 CP850 bytes and 299 UTF-8 bytes, and contain no traversal, separators, colon, or control characters. Unsupported Unicode raises an error; names are never shortened. Some legal archive names still require renaming to extract on Windows; the reader's extraction checks apply unchanged. mkdir,writestr, andwrite_streamacceptdate_time(a naivedatetimein 1980-2107, orNone) and DOSattributes(R/H/S/A bits). Timestamps have two-second resolution.writetakes filesystem modification times; values outside that range become unspecified. It stores ordinary file/directory attributes, not Unix permissions.
After successful close, writer.stats reports file, directory and master counts
and archive size. The C interface is documented in
uc2_writer.h
and the library guide.
Read-only Linux mount
python -m pip install --pre 'uc2[mount]'
mkdir archived
uc2-mount archive.uc2 archived --cache-mib 512
The mount runs in the foreground. Use another terminal to browse archived/files
and archived/versions/1, then unmount with fusermount -u archived.
Linux libfuse2 and /dev/fuse are required. Files decode on first access into
a checksum-verified disk cache; an entry larger than its budget fails with
EFBIG. The default cache holds up to 512 MiB and 128 files. Decoder
allocations are limited to 64 MiB and released after every decode. Python
metadata is outside that budget and has separate entry and node limits.
See the mount documentation
for options, stored versions, and error behavior.
Build from source
Requires Python 3.10+, CMake, and a C99 compiler. The build backend obtains CMake when necessary.
python -m pip install .
python -m build
Source, releases, and the project roadmap are at github.com/evvaletov/uc2.
The distribution contains GPL-3.0-or-later and LGPL-3.0-only code. Independently written Python integration code also has a BSD-2-Clause option. This does not change the licenses of the bundled core or third-party code. License texts, credits, and the per-file audit are included in the distribution.
Incremental directory versions are available through uc2 snapshot in the
Python package, with shared SHA-256-addressed UC2 chunks and verified restores.
See the snapshot guide.
Metadata
Release files for uc2 3.0.0a9
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 | Actions |
|---|---|---|---|---|
| uc2-3.0.0a9.tar.gz | 559.4 kB | Without provenance | Details for uc2-3.0.0a9.tar.gz |
Built distributions (wheels)
Total release size: 5.3 MB
Release files / uc2-3.0.0a9.tar.gz
| Download URL | uc2-3.0.0a9.tar.gz |
|---|---|
| Size | 559.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d19e37e3a812c3cf09ef523c20fbeaad1b98386bf1a63b5c144c10943521cde0
|
|
BLAKE2b-256 checksum How to use checksums |
7a51ebee64694fa086c1eb6b135ddd7e5088a320a8e192423f35ef3315b854dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp314-cp314-win_amd64.whl
| Download URL | uc2-3.0.0a9-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 378.7 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a612f8910d559006d58aeb32b0d133b58636471c5e7844edb40edab5d6bcd1ff
|
|
BLAKE2b-256 checksum How to use checksums |
317a3e29b7718265f34a0aa713161b32f32ae49a44c50d16f4035a53c0e442d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | uc2-3.0.0a9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 197.2 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
82e9fd0c3f9d47b40bae1da8114d05ee9a7c3eaf86a2730027cb27bd1e446a57
|
|
BLAKE2b-256 checksum How to use checksums |
e6b80f322b8819813c4e7f907e75ad62b86ac96e7f411c4f2da13a6ac1e36f16
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | uc2-3.0.0a9-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 189.2 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
78012d7a9023ed50aa60e0766acce7df6d54969e9170efe3ebf549d6cf91f13c
|
|
BLAKE2b-256 checksum How to use checksums |
c4b3191112aea3d40fc914fd6cbd82577a6bb89ce31d04de8a77c7b6ac1dccbe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp314-cp314-macosx_10_15_x86_64.whl
| Download URL | uc2-3.0.0a9-cp314-cp314-macosx_10_15_x86_64.whl |
|---|---|
| Size | 193.2 kB |
| Tags | CPython 3.14 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
b26063814f077e56ebb6d3e8eae1b068a8b66636a30733e27ec5054fa83dab8d
|
|
BLAKE2b-256 checksum How to use checksums |
013024a53e38a592ff9083ca50399e2e0226b704c0811c5f305c076c2c1ae340
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp313-cp313-win_amd64.whl
| Download URL | uc2-3.0.0a9-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 369.6 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
667a99352278b3e2549e8ce398e1389d710d13710c5ceae68eddad0ac718227a
|
|
BLAKE2b-256 checksum How to use checksums |
a100834de08502db874d9da82b2f4363718fbc45bf7c1f491718458fe4128bcf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | uc2-3.0.0a9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 197.2 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
039c8ade817e59a1540734bc07f628fcbb4d89893b62ae437ea061ea88d0bd3f
|
|
BLAKE2b-256 checksum How to use checksums |
b4a99172ec29647a84eeb30523a1bbef540d235428d64a0c218b7cf3d6e0ce6b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | uc2-3.0.0a9-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 189.2 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
27f802cd18780e870e397c2ba627f9103c7a0139dd923ec7b70743493b9ee116
|
|
BLAKE2b-256 checksum How to use checksums |
488937a8c7eea88b0007865fe61575f3d496f388ae67238f337b9b6c0620b132
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | uc2-3.0.0a9-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 192.8 kB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
04fa4f3fb8da361e71d0a9f5cdbd030f4fe7156ce10eb93ad7543a4ef3748cc8
|
|
BLAKE2b-256 checksum How to use checksums |
a6e2c55b8264065869ccd25e6a52fc45e3720f33e8885b918de7af20ec078bf6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp312-cp312-win_amd64.whl
| Download URL | uc2-3.0.0a9-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 369.6 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
09d48c5102fd896c035c2a145fb9301f1ffec9202d301e77d66c29126a0674a3
|
|
BLAKE2b-256 checksum How to use checksums |
16f836fd9b91ca982643554d1bcbf1dc8b79dbcfaccb91c66f39c9c214dcafe5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | uc2-3.0.0a9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 197.2 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ae3e07de191d8c6d0b31969be9aa008b4a0c50647d999bd41896c99cc7fe2df9
|
|
BLAKE2b-256 checksum How to use checksums |
2fdbc99b36e6a0d95138352bcd3569627c34e5290e6f5151c214e2ee00ea7989
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | uc2-3.0.0a9-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 189.2 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ad4ec27736b924e6b1e3b1f6ce9bab3572b6fc7823607841c5823ad783865f30
|
|
BLAKE2b-256 checksum How to use checksums |
1f357b02dd08ed4197d0b286271eaccea545991f26bcba808104a314f04b67f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | uc2-3.0.0a9-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 192.9 kB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
565900e999b45826b7a35739dff49aed7aa40b617a55f8cd8c38f145635bebc0
|
|
BLAKE2b-256 checksum How to use checksums |
906c479660b1f2f8e88cc1d647874c137e9a06358abc2a998462185a5b17a04d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp311-cp311-win_amd64.whl
| Download URL | uc2-3.0.0a9-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 369.6 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
db60e5c2a13f8dadd2cd148bf1a7cb5daf75cc045cb1048e3edfd0ca69681bfa
|
|
BLAKE2b-256 checksum How to use checksums |
fc6b21e17082f04c8dc4734471578d52481ee61896d7aa50dd9956bde24e1f3e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | uc2-3.0.0a9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 197.2 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
24bab3a13b154609cadbe2fd5a59ed8d0cc7c381ce0553cf35378ec4e2ecc163
|
|
BLAKE2b-256 checksum How to use checksums |
4e5dabf2965a600112bec1bf114ddbe97e5bad4e6ca50016adaa7d60e33bde8d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | uc2-3.0.0a9-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 189.1 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e778ffaf356e767dba7fadd2baadd31527cc057dc5e92a56470981bdad7a4c93
|
|
BLAKE2b-256 checksum How to use checksums |
69b85206605c76d397929874f7c2ddf499db91bba576c4c3299f201bba0659aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | uc2-3.0.0a9-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 192.3 kB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
7f3315de37cebad86f89f1163a69a242dd47e47f96fc8c3ade327435deacb122
|
|
BLAKE2b-256 checksum How to use checksums |
b87f0448cfc4e1f94c41ead1dcb627325751be39f87bc4a9aaa2cab048d19ae3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp310-cp310-win_amd64.whl
| Download URL | uc2-3.0.0a9-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 369.8 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
deafe97fa65f7ce9f20d7b91765231f80084031d48fb1d641d0a2bd0ef2e7635
|
|
BLAKE2b-256 checksum How to use checksums |
e5ee3871441d2fa533e769e76fd2f88aa081b875ab9a4e8eccf26762c3889e1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | uc2-3.0.0a9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 197.3 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
b01a9c9287ca785a6f85e844b38d36b5c37654a9ef499383603b11755ac51c78
|
|
BLAKE2b-256 checksum How to use checksums |
6801d782967a0e5224e180a45105e6f339b647fc5d2d4afbdd152785f6995ead
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | uc2-3.0.0a9-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 189.3 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d9285015eaca5124288642eb58d25c261345d7b6efd2bd575100a75e2d846667
|
|
BLAKE2b-256 checksum How to use checksums |
222bdbc309c5e1cdbb62084a6b441a46ca9538b4b4fa5f489560a0e53bca722c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / uc2-3.0.0a9-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | uc2-3.0.0a9-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 192.4 kB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
cf752fd49a9a40d42dbea75741599b92617c190eb5bcb94fbf2a517759909faf
|
|
BLAKE2b-256 checksum How to use checksums |
4a980c09d72257ff7a0c77d9a37029596eb228bd0d9bef6e596d8f3955291f61
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Security for uc2 3.0.0a9
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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.