С помощью setuptools, когда исчезают файлы пространства имен пакетов __init__.py?
В документации по setuptools очень подробно рассказывается о добавлении кода в __init__.py
файлы из пространств имен:
Вы не должны включать какой-либо другой код и данные в пакет пространства имен.
__init__.py
, Несмотря на то, что он может работать во время разработки или когда проекты установлены как файлы.egg, он не будет работать, когда проекты устанавливаются с использованием "системных" инструментов упаковки - в таких случаях__init__.py
файлы не будут установлены, не говоря уже о выполнении.
Тем не менее, я не понимаю, что это за "системные" инструменты упаковки. Кто они такие? Как я мог воспроизвести эту ситуацию, когда __init__.py
файлы пропали?
1 ответ
@ Комментарий Анзель выглядел как хороший ответ, и я бы сказал, что PEP-420 подтверждает это. В разделе "Обоснование" мы читаем:
Пакеты пространства имен предназначены для поддержки разделения на несколько каталогов (и, следовательно, нахождения через несколько
sys.path
записей). В этой конфигурации не имеет значения, все ли несколько частей обеспечивают__init__.py
файл, при условии, что каждая часть правильно инициализирует пакет пространства имен. Однако поставщики дистрибутивов Linux (среди прочих) предпочитают объединять отдельные части и устанавливать их все в один каталог файловой системы. Это создает потенциальную возможность конфликта, поскольку части теперь пытаются предоставить один и тот же файл в целевой системе - что не разрешено многими менеджерами пакетов. Разрешение неявных пакетов пространства имен означает, что требование предоставить__init__.py
файл может быть полностью удален, а затронутые части могут быть установлены в общий каталог или распределены по нескольким каталогам по усмотрению дистрибутивов.
Так что да, мы не можем добавить больше кода к нашему __init__.py
файлы, потому что менеджеры пакетов ОС (и другие) предпочли бы объединить их только в одно дерево каталогов.