pep 420 namespace_packages назначение в setup.py - PullRequest
0 голосов
/ 10 мая 2018

Для чего нужен аргумент namespace_packages в setup.py при работе с пакетами пространства имен PEP420 (без __init __. Py)?

Я играл с ним и увидел без разницы объявил ли я пакеты пространства имен или нет. «setup.py install» и «pip install». работал в любом случае.

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

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Пока вы:

  • стремитесь к Python 3.3 и новее или Python 2.7 с установленной зависимостью importlib2 (обратный порт importlib для Python 2),
  • используйте для упаковки последнюю версию setuptools (думаю, она должна быть 28,8 или более новой)
  • и используйте для установки последнюю версию pip (9.0 и более поздние версии подойдут, вероятно, 8.1.2 также подойдет)работать, но вы должны проверить это сами),

вы на безопасной стороне и можете спокойно пропустить ключевое слово namespace_packages в ваших скриптах установки.

Существует Официальный репозиторий PyPA с именем sample-namespace-packages для GitHub , который содержит набор тестов для различных возможных сценариев установленных дистрибутивов, которые содержат пакеты пространства имен каждого вида.Как видите, примеры пакетов, использующих неявные пакеты пространства имен, не используют namespace_packages arg в своих сценариях установки (здесь один из сценариев ) и во всех тестах типов pep420 иcross_pep420_pkgutil пройти на Python 3;вот полная таблица результатов .

0 голосов
/ 11 мая 2018

Пакеты пространств имен - это отдельные пакеты, которые устанавливаются под одним именем верхнего уровня.

Обычно два разных пакета (например, SQLObject и Cheetah3 ) установить два (или более) разных пакета верхнего уровня (sqlobject и Cheetah в моих примерах).

Но что если у меня есть библиотека, которую я хочу разделить на части и разрешитьустановить эти части без остальной библиотеки?Я использую пакеты пространства имен.Пример: эти два пакета являются 2 частями одной библиотеки: m_lib и m_lib.defenc .Один устанавливает m_lib/defenc.py, который можно использовать отдельно, другой устанавливает остальную часть библиотеки m_lib.Для установки сразу всей библиотеки я также предоставляю m_lib.full .

PS.Все упомянутые пакеты мои.Исходный код предоставляется на Github или мой личный хостинг Git .

...