Skip to content

PyPI

NORA implements the PEP 503 (Simple Repository API) and PEP 691 (JSON Simple API) specifications. Upload packages with twine and install with pip, with transparent proxying from pypi.org.

Install packages through NORA:

Terminal window
pip install --index-url http://nora.example.com:4000/pypi/simple/ my-package

Per-project pip.conf or environment variable:

Terminal window
export PIP_INDEX_URL=http://nora.example.com:4000/pypi/simple/

Upload packages:

Terminal window
twine upload --repository-url http://nora.example.com:4000/pypi/ dist/*

NORA fetches packages from PyPI when they are not found locally. Download URLs in index pages are rewritten to point through NORA.

config.toml:

[pypi]
enabled = true
proxy = "https://pypi.org/simple/"
proxy_timeout = 30

Environment variables:

VariableDescriptionDefault
NORA_PYPI_ENABLEDEnable PyPI registrytrue
NORA_PYPI_PROXYUpstream registry URLhttps://pypi.org/simple/
NORA_PYPI_PROXY_AUTHUpstream auth (user:pass)
NORA_PYPI_PROXY_TIMEOUTUpstream timeout in seconds30
FeatureStatusNotes
Simple index (HTML)FullPEP 503
Simple index (JSON)FullPEP 691, via Accept header
Package versions pageFullHTML + JSON
File downloadFullWheel, sdist, egg
twine uploadFullMultipart form-data
SHA256 hashesFullIn metadata links
Case normalizationFullMy-Package becomes my-package
JSON API metadataFullapplication/vnd.pypi.simple.v1+json
Upstream proxyFullConfigurable TTL
YankingNot implemented
Upload signatures (PGP)Not implemented
  • Yanking is not supported.
  • PGP upload signatures are not supported.