Есть ли способ создать исходный дистрибутив вкл. подпакеты без __init__.py?

1

Возможно ли создать исходный дистрибутив с помощью python setup.py sdist без использования каких-либо файлов __init__.py в каждом пакете (python 3. 5+)? Я действительно хотел бы просто использовать пакеты пространства имен, чтобы избежать избыточности и накладных расходов. Все вложенные .py -files во всех подпакетах должны быть включены.

Поэтому возьмите следующую структуру проекта (я пытался быть аналогичным документации pytest):

Изображение 174551

setup.py:

from setuptools import setup, find_packages
setup(
    version="0.0.1",
    name="py_import_test",
    package_dir={"": "src"},
    packages=find_packages(where='src')
)

В main.py я использую что-то вроде

import py_import_test.p1.helloworld
# do something with helloworld-module

Когда я python setup.py sdist с вышеуказанной структурой проекта, я не получаю исходных файлов вообще в полученном.tar.gz. Он работает только при наличии __init__.py в py_import_test, p1 и возможных дополнительных подпакетах.

В общем, моя цель - иметь отдельный автономный пакет приложений, который я могу использовать для тестирования и простой установки моего пакета на удаленный сервер. Для этой цели я хотел бы, чтобы исходное дерево было максимально сухим и использовало современные шаблоны упаковки python.

Помимо моего вопроса относительно __init__.py: Будет ли рассмотренная выше процедура хорошей/современной практикой?

Привет

  • 1
    Просто поместите файлы __init__.py в каталоги, и они волшебным образом станут пакетами. Не волнуйтесь, они не байт!
Теги:
python-3.x
setuptools

1 ответ

1
Лучший ответ

Вместо find_packages вы хотите find_namespace_packages (ранее известный как find_packages_ns).

Требуется последняя версия setuptools; функция была добавлена в версии 40.1.0, выпущенной в августе 2018 года.

Вам также необходимо быть осторожным, чтобы вы не включали каталоги, которые не предназначены для пакетов, а вот where='src' которые у вас уже есть, должны позаботиться об этом.

  • 0
    спасибо, работает как шарм. Я должен был pip install setuptools --upgrade раньше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню