{
  "slug": "registry/pypi",
  "title": "PyPI packages",
  "description": "Upload Python wheels and sdists with Cuitty Registry.",
  "url": "https://cuitty.com/docs/registry/pypi",
  "markdown_url": "https://cuitty.com/docs/registry/pypi.md",
  "json_url": "https://cuitty.com/docs/registry/pypi.json",
  "frontmatter": {
    "title": "PyPI packages",
    "description": "Upload Python wheels and sdists with Cuitty Registry.",
    "order": 5,
    "section": "Registry",
    "updatedAt": "2026-06-09"
  },
  "headings": [
    {
      "depth": 2,
      "slug": "upload-with-twine",
      "text": "Upload with Twine"
    },
    {
      "depth": 2,
      "slug": "pypirc",
      "text": ".pypirc"
    }
  ],
  "body_markdown": "Cuitty Registry supports PyPI-compatible uploads and Simple API installation. Package names are normalized before storage, while namespace ownership remains a separate Registry policy decision.\n\n## Upload with Twine\n\n```bash\npython -m twine upload \\\n  --repository-url https://registry.example.com/pypi/ \\\n  dist/*\n```\n\nInstall from the Simple API:\n\n```bash\npip install --index-url https://registry.example.com/pypi/simple/ my-package\n```\n\n## `.pypirc`\n\n```ini\n[distutils]\nindex-servers =\n  cuitty\n\n[cuitty]\nrepository = https://registry.example.com/pypi/\nusername = __token__\npassword = ${CUITTY_REGISTRY_TOKEN}\n```\n\nThen upload with:\n\n```bash\npython -m twine upload --repository cuitty dist/*\n```\n\nYanking a version hides it from normal resolution without deleting the file unless an operator explicitly removes the artifact.",
  "links_out": []
}