pypiserver
pypiserver is a self-hosted package index for serving Python packages through standard tools such as pip and twine.
What pypiserver is
pypiserver is a self-hosted package index for serving Python packages through standard tools such as pip and twine. It reads packages recursively from regular directories and supports wheels, bdists, eggs, and accompanying PGP signatures. Uploads can be sent with pip, setuptools, twine, or pypi-uploader, or copied to the server with scp. Upload access can be protected with an Apache htpasswd file; API users can also configure custom authentication callables. The maintainers advise protecting uploads with a password, and the documentation recommends a reverse proxy for HTTPS. pypiserver can run as a WSGI application, with documented integrations for Docker, nginx, Apache, gunicorn, and Paste. Its default health endpoint returns HTTP 200 when the service is up, and can be configured. The current version supports Python 3.10+ and PyPy3. It is free and open source, with Windows service instructions as well as Linux guidance. Its API covers common package operations rather than the full PyPI API; accepted documentation uploads are not saved to disk.
Good
- Supports pip, twine, and other packaging clients.
- Accepts package uploads or scp copies.
- Supports upload authentication and custom callables.
- Includes a health endpoint and Docker images.
Watch out
- Does not implement the full PyPI API.
- Documentation uploads are not saved to disk.
- Default directory scanning can slow large collections.
- Current version requires Python 3.10+ or PyPy3.
Who it suits
It suits people who want to host their own Python package index and use standard packaging tools to upload or install packages. It is a better fit for smaller package collections unless directory caching is configured, since requests scan the package directory by default.
Verdict
pypiserver provides a focused, self-hosted index for Python packages, with several upload methods and basic access protection. Consider its limited API and default directory scanning behavior when planning a larger package collection.
Plans and prices
From pypiserver's own pricing page, checked 10 Oct 2026.
| Plan | Price | What it gives you |
|---|---|---|
| pypiserver | Free | Open-source package server; self-hosted; minimal PyPI-compatible API |
The facts
Each one read from pypiserver's own pages, with the date it was checked.
What it does
- API and servers
- Its API returns a WSGI application that can be run with supported or user-chosen WSGI servers.checked 10 Oct 2026
- API limit
- pypiserver implements only enough of the PyPI API for easy_install, pip install, and search, rather than the full API.checked 9 Oct 2026
- Authentication
- Uploads can be protected with Apache htpasswd authentication, and API users can configure a custom authentication callable.checked 10 Oct 2026
- Clients
- Standard Python packaging tools including pip and twine can use it as a package index.checked 9 Oct 2026
- Deployment
- The project publishes Docker images for main branch pushes and dev, alpha, beta, and final releases.checked 10 Oct 2026
- Docker
- Official Docker images are built for main pushes and development, prerelease, and final releases.checked 9 Oct 2026
- Documentation limitation
- It accepts documentation uploads but does not save them to disk.checked 9 Oct 2026
- Health checks
- It provides a default /health endpoint that returns HTTP 200 when the service is up and supports a configurable endpoint.checked 9 Oct 2026
- HTTPS
- The documentation recommends putting pypiserver behind a reverse proxy to provide HTTPS.checked 9 Oct 2026
- Integrations
- The documentation shows integration with pip, easy_install, setuptools, twine, Docker, and reverse proxies including Nginx and Traefik.checked 10 Oct 2026
- Intended users
- The project describes itself as a self-hosted package index for users who want to serve their own Python packages.checked 9 Oct 2026
- License
- The project’s remaining code is distributed under the zlib/libpng license, and its bundled Bottle copy is MIT-licensed.checked 10 Oct 2026
- Limitations
- It does not implement the full PyPI API and documents that it accepts documentation uploads but does not save them to disk.checked 10 Oct 2026
- Package formats
- It supports wheels, source distributions, eggs, and accompanying PGP signatures.checked 10 Oct 2026
- Purpose
- pypiserver is a minimal PyPI-compatible server for uploading and downloading Python packages with pip or easy_install.checked 10 Oct 2026
- PyPI compatibility
- It implements the PyPI interfaces needed for standard packaging tools such as pip and twine to use it as a package index.checked 10 Oct 2026
- Python support
- The current version works with Python 3.10+ and PyPy3; older Python versions are not tested and the 1.x series is unsupported.checked 10 Oct 2026
- Scale limit
- The server scans the package directory for each incoming HTTP request by default, which can noticeably slow down service for thousands of packages; directory caching can improve performance.checked 9 Oct 2026
- Security guidance
- The project strongly advises password-protecting uploads and describes HTTPS deployment through a reverse proxy as the preferred approach.checked 10 Oct 2026
- Storage
- It serves packages from regular directories and scans package directories recursively.checked 10 Oct 2026
- Support
- The maintainers direct users to GitHub Discussions and a Zulip community chat, and direct bug reports to GitHub’s bug tracker.checked 10 Oct 2026
- Uploading
- Packages can be uploaded with pip, setuptools, twine, pypi-uploader, or copied to the server with scp.checked 9 Oct 2026
- Upload methods
- Packages can be uploaded with pip, setuptools, twine, pypi-uploader, or copied with scp.checked 10 Oct 2026
Where it runs
- Platform support
- The README includes Windows service instructions using NSSM and systemd service instructions for Linux.checked 10 Oct 2026
The full review of pypiserver
Overview
pypiserver is a self-hosted index for distributing Python packages through familiar tools such as pip and easy_install. It best suits developers and small teams who want to serve their own packages from ordinary directories. Its narrow scope makes it a practical fit for a focused Python index, but not a full-featured package repository.
Key features
The server scans package directories recursively and serves wheels, bdists, eggs, and accompanying PGP signatures. Because packages stay in regular directories, teams can use an existing file-based setup rather than adopting a larger repository system. Standard Python clients, including pip and twine, can use it as a package index.
Publishing options include pip, setuptools, twine, pypi-uploader, and copying files with scp. That range accommodates both automated publishing and direct file transfers. Upload protection can use an Apache htpasswd file; API users can also configure custom authentication callables. The maintainers strongly advise protecting uploads with a password, which is essential to account for when serving private packages.
pypiserver provides a WSGI application and documents deployment with Docker, nginx, Apache, gunicorn, Paste, and other WSGI servers. Official Docker images are built for main pushes and development, prerelease, and final releases. A default /health endpoint returns HTTP 200 when the service is up, and can be configured for deployment needs. For HTTPS, the documentation recommends placing the server behind a reverse proxy.
The API covers the needs of pip installation, easy_install, and package search, not the full PyPI API. It accepts documentation uploads but does not save them to disk. These limits are manageable for straightforward package distribution, but may rule it out when clients or workflows rely on broader PyPI functionality or stored documentation.
Pricing
pypiserver is open-source software with a free plan at no cost. There is no paid tier to weigh against the self-hosting work: teams supply and operate the environment themselves. The remaining code uses the zlib/libpng license, and its bundled Bottle copy is MIT-licensed.
Platforms
It supports Linux, macOS, and Windows, as well as self-hosted deployment and an API. The project includes systemd service instructions for Linux and Windows service instructions using NSSM. Current releases work with Python 3.10+ and PyPy3; older Python versions are untested and unsupported by the current series.
Who it's for
Choose pypiserver when you need a modest, self-managed home for Python packages and value ordinary directory storage and familiar publishing tools. Its narrow PyPI interface and basic upload protection suit focused internal or personal indexes. Look elsewhere if you need a full PyPI API, stored documentation, or a broader artifact repository.
Pros and cons
- Pro: Several upload routes, including common Python tools and scp, let teams fit publishing into existing workflows.
- Pro: Directory-backed storage keeps package organization straightforward and serves multiple common Python package formats.
- Pro: Docker images, WSGI deployment options, and a health endpoint support varied self-hosted operations.
- Con: The server scans the package directory on each request by default; collections numbering in the thousands can slow service, though directory caching can improve performance.
- Con: The API is intentionally partial, and uploaded documentation is not retained on disk.
- Con: Upload security and HTTPS require deployment choices, including password protection and a reverse proxy for HTTPS.
Alternatives
For a public registry aimed at JavaScript packages, consider npm, whose free plan includes unlimited public packages and public registry access. If you want private package and Docker feeds with broader security and compliance features, consider Inedo ProGet; its free edition offers unlimited feeds but has limited security and compliance features.
For other language-specific package ecosystems, LuaRocks, Bioconductor, and CPAN are alternatives. For a public publishing platform that requires a GitHub account to publish a packages.json registry, consider R-universe. For a CLI tool with an HTTP REST service, consider aptly. For an iOS and macOS package manager, consider CocoaPods.
Browse Package Registries and Artifact repository software for more options.
Verdict
pypiserver is a sensible choice for individuals and teams who want a free, self-hosted Python index with direct directory storage and multiple upload paths. Its main appeal is keeping package distribution focused and compatible with standard Python tools. Choose another service if you need the full PyPI API, retained documentation uploads, or a package collection large enough to make default request-time scanning a concern.
Alternatives to pypiserver
- 1
PyPI
Free planOpen sourceWebAPILinuxmacOS8.1Free plan - 2
Bioconductor
Free planOpen sourceWebLinuxmacOSSelf-hosted7.6Free plan - 3
npm
Free planLinuxmacOSWindows7.5From $7 a month - 4

Inedo ProGet
Free planWebAPILinuxSelf-hosted7.4From $2,395 a year - 5
GNU ELPA
Free planOpen sourceWebSelf-hosted7.0Free plan - 6
LuaRocks
Free planAPILinuxmacOSSelf-hosted6.9Free plan
