GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Python Packaging User Guide

This view

  • Original page
  • New address

GeezerVison is showing packaging.python.org — Names and normalization - Python Packaging User Guide

Names and normalization¶

This specification defines the format that names for packages and extras are required to follow. It also describes how to normalize them, which should be done before lookups and comparisons.

Name format¶

A valid name consists only of ASCII letters and numbers, period, underscore and hyphen. It must start and end with a letter or number. This means that valid project names are limited to those which match the following regex (run with re.IGNORECASE):

^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])\Z

Name normalization¶

The name should be lowercased with all runs of the characters ., -, or _ replaced with a single - character. This can be implemented in Python with the re module:

import re

def normalize(name):
    return re.sub(r"[-_.]+", "-", name).lower()

This means that the following names are all equivalent:

  • friendly-bard (normalized form)

  • Friendly-Bard

  • FRIENDLY-BARD

  • friendly.bard

  • friendly_bard

  • friendly--bard

  • FrIeNdLy-._.-bArD (a terrible way to write a name, but it is valid)

History¶

  • September 2015: The specification of name normalized was approved through 503.

  • November 2015: The specification of valid names was approved through 508.

  • August 2025: The suggested name validation regex was fixed to match the field specification (it previously finished with $ instead of \Z, incorrectly permitting trailing newlines)

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.