Как структурировать проект Python с помощью точки . или подчеркивание - в имени проекта/пакета?

PEP 423 указывает, что имена проектов и имена пакетов должны совпадать, а позже указывается пример, в котором имя проекта/пакета содержит точку :

Да:
Имя пакета: kheops.pyramid, т.е. import kheops.pyramid
Название проекта: kheops.pyramid, т.е. pip install kheops.pyramid

Какой будет структура каталогов для kheops.pyramid и как будет записано setup.py (в частности, значения name и packages) для этой структуры каталогов?

Я также видел, что PEP 503 утверждает, что имена следует нормализовать, заменив _, - и . на -. Означает ли это, что следует использовать kheops-pyramid, а не kheops.pyramid? Если да, то не нужен ли мне пакет с именем каталога kheops-pyramid и не будет ли - вызывать проблемы (например, синтаксическую ошибку) при попытке import kheops-pyramid?

EDIT:
Я пытался создать проект/пакет kheops.pyramid, чтобы он соответствовал PEP 423, но я не могу понять, какая структура каталогов и комбинация setup.py позволят мне import kheops.pyramid после pip install kheops.pyramid без ошибки вроде ImportError: No module named kheops.pyramid.


person Pedro Cattori    schedule 11.06.2016    source источник
comment
Вы смотрели пакеты пространства имен? См., например. python.org/dev/peps/pep-0420   -  person jonrsharpe    schedule 11.06.2016
comment
@jonrsharpe Я раньше не видел PEP 420. Это определенно кажется актуальным, но я не уверен, что понимаю, как решить мою проблему.   -  person Pedro Cattori    schedule 11.06.2016
comment
В чем ваша проблема? Вы пытаетесь создать пакет с . в имени и терпите неудачу?   -  person jonrsharpe    schedule 11.06.2016
comment
@jonrsharpe да. я пытаюсь сделать проект/пакет, например username.package, чтобы придерживаться PEP 423 python.org/dev/peps/pep-0423/, но я не могу понять, какая структура каталогов и комбинация setup.py позволят мне import username.package после pip install username.package без ошибки вроде ImportError: No module named username.package . Отредактирует вопрос, чтобы сделать это более очевидным.   -  person Pedro Cattori    schedule 11.06.2016
comment
Вам нужно, чтобы kheops существовало сначала, чтобы kheops.pyramid стало возможным.   -  person tripleee    schedule 12.06.2016
comment
@tripleee не уверен, что это за kheops в вашем комментарии: проект, пакет, каталог?   -  person Pedro Cattori    schedule 12.06.2016
comment
Пакет, наверное. Касательно, см. также stackoverflow.com/questions/7948494/whats-the-difference-between-a-python-module-and-a-python-package.   -  person tripleee    schedule 12.06.2016


Ответы (2)


PEP 423 отложен, поэтому я закончил делать эквивалент pyramid, а не kheops.pyramid через стандартную упаковку Python. Вот пакет, который я придумал в качестве примера.

person Pedro Cattori    schedule 12.06.2016

from username import package должно работать.

Вы уверены в своем PYTHONPATH ?

Возможно, вы захотите попробовать выполнить системные команды после PYTHONPATH=. ? Это связано с тем, что вы, возможно, не установили PYTHONPATH для включения каталога, содержащего username/

Вы также можете проверить структуру пакетов Python.

person trishnag    schedule 12.06.2016