By default, PyPI limits each uploaded file to 100 MB and each project to 10 GB in total. If you exceed either, the upload fails with a 400 error. Reduce what you ship, delete old files with care, or ask PyPI for a higher limit with a short justification.
The two limits
PyPI documents two storage limits.
| Limit | Default | Error you will see |
|---|---|---|
| Single file | 100 MB | File too large, with the limit for your project |
| Whole project | 10 GB | Project size too large, with the total limit |
The PyPI help page states the same numbers using binary units, and says individual projects may differ from the defaults. You can see your own current size and limits on the project settings page in the PyPI management area.
First, find out why the file is big
Most oversized uploads are accidents, not products. Check these before asking for more room.
- A dataset, model weights or sample media inside the package.
- Build output folders or caches swept up by an include rule.
- A wheel containing debug symbols or several bundled copies of a native library.
- Duplicated vendored code.
List your artifacts with tar tzf and unzip -l, as we describe in how to inspect your sdist before uploading. If the content is data, consider downloading it on first use from a location you control, and verifying a checksum, rather than shipping it in the wheel.
Freeing space on an existing project
The PyPI docs make a point that surprises people: yanking does not free storage. Yanking only marks a release so installers ignore it unless a version is pinned exactly. The files stay.
Only deleting frees space. The docs warn that deletion is permanent and cannot be undone without administrative intervention, and that it can be disruptive to downstream users because it breaks installation for pinned versions. They strongly recommend considering the impact on downstreams first.
If you decide to delete, the steps in the management interface are:
- Open the release management page for your project.
- Click Options next to the release.
- Choose Delete to remove the whole release, or choose Manage and delete individual files.
Remember the filename rule: PyPI does not allow a deleted filename to be uploaded again, so you will need a new version number if you rebuild.
Requesting an increase
If you cannot reduce the size, PyPI can sometimes raise your limit.
For a file size increase, upload at least one release that is under the limit first. A development release version is fine. Then file an issue with a link to your project on PyPI or TestPyPI, the size of your release in megabytes, which index you need it for, and a brief description including why the extra size is needed.
For a project size increase, first remove unnecessary releases or files. If that is not possible, file an issue with a link, the total size in gigabytes, and the reason.
PyPI's docs say increases are granted only sometimes, so plan for refusal. A refusal is a signal to rethink packaging, for example by splitting a large optional component into a separate package.
Prevent it next time
- Add a CI step that fails when an artifact exceeds an agreed size.
- Keep data and models out of the repository tree that your build includes.
- Review the file list at every release.
Safeguard's SBOM and dependency scanning show what a project includes. A free scan helps you spot unexpected components.
Quick check
Does yanking a release free up storage?
No. The PyPI docs state yanking does not free space. Only deleting files or releases does, and deletion is permanent.
Do I need an existing release to ask for a bigger file limit?
Yes. Upload at least one release under the limit first, then file the request with the details PyPI asks for.
Is the 10 GB limit per file or per project?
Per project, across all its files. The single file default is 100 MB.
Sources
Last reviewed: 19 October 2026.