A PyPI mirror client that implements PEP 381, PEP 503, and PEP 691 for creating local Python package repositories.
Bandersnatch is a PyPI mirror client that creates and maintains a local copy of the Python Package Index. It implements PEP standards 381, 503, and 691 to sync static package metadata and files, enabling organizations to host their own Python package repositories. This solves problems like high latency, bandwidth constraints, and dependency on PyPI's availability for package installations.
System administrators, DevOps engineers, and organizations that need to host a local PyPI mirror for internal use, CI/CD pipelines, or air-gapped environments. It's also for Python packaging maintainers who require reliable, standards-compliant mirroring tools.
Developers choose Bandersnatch because it's the official PyPA-supported mirroring tool with full PEP compliance, ensuring compatibility with pip and other Python package managers. Its plugin system and Docker support make it highly customizable and easy to deploy in various infrastructure setups.
A PyPI mirror client according to PEP 381 + PEP 503 + PEP 691
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Implements PEP 381, 503, and 691 for standardized mirroring, ensuring full compatibility with pip and other Python package managers as it's officially supported by PyPA.
Supports plugins like blocklist and allowlist to customize which packages are mirrored, allowing organizations to reduce storage and bandwidth based on specific needs.
Provides Docker images and Docker Compose examples for easy deployment, and is tested on Linux, macOS, and Windows, though with platform-specific caveats like Windows admin requirements.
Designed solely to mirror static PyPI content needed for package installation, prioritizing stability and standards compliance over dynamic features, as stated in the mission.
When using the modern Simple API, mirrors can lag up to an hour behind PyPI due to CDN caching, as explicitly admitted in the README under 'Using simple API for metadata'.
Only mirrors static, cacheable parts of PyPI, missing dynamic functionalities like search or user management that some clients might require, limiting its use for advanced tooling.
Requires case-sensitive filesystems and avoids ext3 due to sub-directory limits; on Windows, it needs elevated permissions for symlinks, adding deployment complexity and potential barriers.