20 февраля 1991 года Гвидо ван Россум опубликовал в группе alt.sources первый выпуск языка программирования Python, над которым работал с декабря 1989 года в рамках проекта по созданию скриптового языка для решения задач системного администрирования в операционной системе Amoeba, который был бы более высокого уровня, чем Си, но, в отличие от Bourne shell, предоставлял бы более удобный доступ к системным вызовам ОС.

Имя для проекта было выбрано в честь комедийной группы Монти Пайтон (Monty Python). В первой версии была реализована поддержка классов с наследованием, обработка исключений, система модулей и базовые типы list, dict и str. Реализация модулей и исключений была заимствована из языка Modula-3, а стиль кодирования на основе отступов из языка ABC, в разработке которого Гвидо ранее принимал участие.

В процессе создания Python Гвидо руководствовался следующими принципами:

  • Принципы, которые позволили сэкономить время при разработке:
    • Заимствование полезных идей из других проектов.
    • Стремление к простоте, но без чрезмерного упрощения (принцип Эйншейна «Всё должно быть изложено так просто, как только возможно, но не проще»).
    • Следование философии UNIX, в соответствии с которой программы реализуют какую-то одну функциональность, но делают это хорошо.
    • Не слишком заботиться о производительности, оптимизации можно добавлять по мере необходимости, когда они понадобятся.
    • Не пытаться бороться с сложившимися вещами, а плыть по течению.
    • Избегать перфекционизма, обычно хватает и уровня «достаточно хорошо».
    • Иногда можно срезать углы, особенно, если что-то можно сделать позднее.
  • Остальные принципы:
    • Реализация не должна быть привязана к конкретной платформе. Некоторые возможности могут быть доступны не всегда, но базовая функциональность должна работать везде.
    • Не нагружать пользователей деталями, обработку которых может взять на себя машина.
    • Поддержка и продвижение платформонезависимого пользовательского кода, но без ограничения доступа к возможностям и особенностям платформ.
    • Большие сложные системы должны предоставлять несколько уровней для расширения.
    • Ошибки не должны быть фатальными и незамеченными — пользовательский код должен иметь возможность перехватить и обработать ошибки.
    • Ошибки в пользовательском коде не должны влиять на функциональность виртуальной машины и не должны приводить к неопределённому поведению интерпретатора и краху процессов.