Использование дефиса / тире в имени репозитория Python и имени пакета - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь сделать так, чтобы мой pit-репозиторий git мог быть установлен.Готовясь к этому, я реструктурирую репо, чтобы следовать правильным соглашениям.Насколько я понимаю, глядя на другие репозитории, я должен поместить весь свой исходный код в пакет с тем же именем, что и имя репозитория.Например, если мой репозиторий называется myrepo, то весь исходный код будет помещен в пакет, также называемый myrepo.

В моем репозитории есть дефис для удобства чтения: например, my-repo.Поэтому, если бы я захотел сделать для него пакет с таким же именем, в нем бы тоже был дефис. В этом уроке написано "не используйте дефисы" для имен пакетов Python.Однако я видел хорошо известные пакеты, такие как scikit-learn, в названии которых есть дефисы.Однако я заметил одну вещь: в репозитории scikit-learn имя пакета не совпадает с именем репо, а вместо этого называется sklearn.

Я думаю, что мое обсуждение выше сводится кследующие вопросы:

  1. При упаковке репо, какова связь между именем репозитория и именем пакета?Есть ли что-то, о чем следует опасаться, когда имена не совпадают?
  2. Можно ли использовать дефисы в именах пакетов?Как насчет имен репозитория?
  3. Если имя пакета для scikit-learn равно sklearn, то почему при его установке я делаю pip install scikit-learn вместо pip install sklearn?

1 Ответ

0 голосов
/ 08 февраля 2019

Чтобы ответить на ваш 1-й пункт, позвольте мне перефразировать мой ответ на другой вопрос.

Самым большим источником недоразумений является то, что слово "пакет" сильно перегружено.В игре 4 разных имени - имя репозитория, имя каталога, используемого для разработки (содержащего setup.py), имя каталога, содержащего __init__.py и других импортируемых модулей, имяраспространения в PyPI.Довольно часто эти 4 одинаковы или похожи, но это не обязательно.

Имена репозитория и каталога разработки могут быть любыми, их имена не играют никакой роли.Конечно, их удобно называть правильно, но это только удобство.

Имя каталога с файлами Python - имя импортируемого пакета.Как только пакет назван для импорта, имя обычно застревает и не может быть изменено.

Имя дистрибутива дает одну страницу в PyPI и имя дистрибутивных файлов (исходный дистрибутив, яйца, колеса).Это имя, которое вставляют в setup(name='distribution') call.

Позвольте мне показать подробный реальный пример.Я поддерживаю библиотеку шаблонов под названием CheetahTemplate .Я разрабатываю его в каталоге разработки под названием cheetah3/.Распределение в PyPI называется Cheetah3 ;это имя я ввел в setup(name='Cheetah3').Модуль верхнего уровня - Cheetah, следовательно, каждый делает import Cheetah.Template или from Cheetah import Template;это означает, что у меня есть каталог cheetah3/Cheetah/.

Ответ на вопрос 2: у вас могут быть тире в именах репозиториев и дистрибутивов PyPI, но не в именах пакетов (каталогов с __init__.py) и модулей (.py файлов) имен, потому что вы не можете писать на Python import xy-zzy, это будет вычитанием и SyntaxError.

Точка 3: Имена сайта и хранилища - scikit-learn, а также имя дистрибутива , но импортируемый пакет (каталог верхнего уровня с __init__.py) sklearn .

PEP 8 не имеет ничего общего с вопросом, так какне будем говорить о дистрибуции, только об импортируемых пакетах и ​​модулях.

...