Чтобы ответить на ваш 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 не имеет ничего общего с вопросом, так какне будем говорить о дистрибуции, только об импортируемых пакетах и модулях.