Допустимо ли иметь имена пакетов Python с номерами в нем? - PullRequest
0 голосов
/ 17 ноября 2018

Я видел имена дистрибутивов PyPI, а также имена пакетов Python с цифрами в них. Например, flake8 является одним из примеров, где вы также импортируете с import flake8.

Согласно стандартам PyPI и PEP, можно ли указывать номер в имени пакета? Я знаю, что вы не можете начинать с числа по причинам синтаксиса, но это нормально в середине или в конце с точки зрения стандартов?

1 Ответ

0 голосов
/ 17 ноября 2018

Во-первых, обратите внимание, что имена проектов 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).

Итак, да, у вас может быть номер как в имени проекта, так и в имени модуля, а имя проекта может даже начинаться с единицы!

...