Во-первых, обратите внимание, что имена проектов PyPI и имена модулей полностью независимы; ничто не мешает вам создать пакет foo
, который устанавливает модуль bar
, и эти два имени следуют отдельным политикам относительно того, что действительно.
Имена модулей ограничены грамматикой Python, чтобы быть действительными идентификаторами . В Python 2 это означает, что они должны состоять из буквы ASCII или символа подчеркивания, за которым следует ноль или более букв ASCII, цифр и / или символов подчеркивания. В Python 3 добавлен Unicode, и все усложняется, но я считаю, что имена всех модулей ASCII по-прежнему подчиняются тем же ограничениям.
Имена проектов в PyPI (как указано в PEP 508 , среди прочего) должны состоять исключительно из букв ASCII, цифр, .
, -
и / или _
, и они должны начинаться и заканчиваться буквой или цифрой. Существует также политика нормализации , которая обеспечивает учет регистра без учета регистра и рассматривает прогоны .
, -
и _
как равные, поэтому foo-bar
и FOO.BAR
считаются одним и тем же проектом.
Кроме того, PEP 8 содержит раздел с именами пакетов и модулей ; это говорит:
Модули должны иметь короткие, строчные имена. Подчеркивания могут использоваться в имени модуля, если это улучшает читабельность. Пакеты Python также должны иметь короткие, строчные имена, хотя использование символов подчеркивания не рекомендуется.
Когда модуль расширения, написанный на C или C ++, имеет сопровождающий модуль Python, который обеспечивает интерфейс более высокого уровня (например, более объектно-ориентированный), модуль C / C ++ имеет начальное подчеркивание (например, _socket
).
Итак, да, у вас может быть номер как в имени проекта, так и в имени модуля, а имя проекта может даже начинаться с единицы!