{"library":"pypiserver","title":"pypiserver","description":"pypiserver is a minimal PyPI compatible server for pip or easy_install, designed to serve packages from local directories. It is built on the Bottle web framework and supports uploading wheels, bdists, eggs, and accompanying PGP-signatures via standard Python packaging tools like pip, setuptools, and twine, or simply by copying files. As of version 2.4.1, it is actively maintained with frequent releases, typically several per year, focusing on maintenance, dependency updates, and new features.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install pypiserver","pip install pypiserver[passlib,cache]"],"cli":{"name":"pypi-server","version":"2.4.1"}},"imports":["from pypiserver import app"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"# 1. Install pypiserver (if not already done)\n# pip install pypiserver\n\n# 2. Create a directory to store your packages\nmkdir -p ~/my_pypi_packages\n\n# 3. Start the PyPI server in the background\n# This will serve packages from ~/my_pypi_packages on port 8080\npypi-server run -p 8080 ~/my_pypi_packages &\n\n# 4. (Optional) Create a dummy package to upload\nmkdir my_dummy_package\necho 'from setuptools import setup, find_packages\\nsetup(name=\"my-dummy-package\", version=\"0.1.0\", packages=find_packages())' > my_dummy_package/setup.py\necho '__init__.py' > my_dummy_package/my_dummy_package/__init__.py\npip install build twine\npython -m build --sdist --wheel my_dummy_package\n\n# 5. Upload a package using twine\n# Replace 'dist/*' with the path to your package files (e.g., .whl, .tar.gz)\ntwine upload --repository-url http://localhost:8080 dist/*\n\n# 6. Install a package from your local PyPI server\n# For HTTP, you might need --trusted-host if pip complains\npip install --index-url http://localhost:8080/simple/ --trusted-host localhost my-dummy-package\n\n# To stop the server later, find its process ID (e.g., `pgrep pypi-server`) and `kill <PID>`","lang":"bash","description":"This quickstart guides you through setting up a basic pypiserver instance, creating a dummy package, uploading it, and then installing it using pip. It demonstrates the command-line interface for running the server and typical client-side interaction.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"2.4.0","pypi_latest":"2.4.1","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2,"avg_import_s":0.28,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.21,"mem_mb":7,"disk_size":"19.5M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"passlib,cache","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.32,"mem_mb":9.1,"disk_size":"23.7M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":1.9,"import_time_s":0.17,"mem_mb":7,"disk_size":"20M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"passlib,cache","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":2.1,"import_time_s":0.28,"mem_mb":9.1,"disk_size":"24M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.29,"mem_mb":7.8,"disk_size":"21.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"passlib,cache","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.44,"mem_mb":10.1,"disk_size":"26.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":1.9,"import_time_s":0.26,"mem_mb":7.8,"disk_size":"22M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"passlib,cache","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":2.3,"import_time_s":0.43,"mem_mb":10.1,"disk_size":"27M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.25,"mem_mb":7.6,"disk_size":"13.1M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"passlib,cache","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.37,"mem_mb":9.8,"disk_size":"17.8M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":1.6,"import_time_s":0.26,"mem_mb":7.6,"disk_size":"14M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"passlib,cache","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":2,"import_time_s":0.42,"mem_mb":9.8,"disk_size":"18M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.21,"mem_mb":7.8,"disk_size":"12.9M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"passlib,cache","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.31,"mem_mb":10.1,"disk_size":"17.7M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.23,"mem_mb":7.8,"disk_size":"13M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"passlib,cache","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.34,"mem_mb":10.1,"disk_size":"18M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.16,"mem_mb":6.9,"disk_size":"19.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"passlib,cache","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.26,"mem_mb":8.9,"disk_size":"23.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pypiserver","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.2,"import_time_s":0.14,"mem_mb":6.9,"disk_size":"20M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"passlib,cache","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":0.26,"mem_mb":8.9,"disk_size":"24M"}]}}