Есть ли способ создать исходный дистрибутив вкл.подпакеты без __init__.py? - PullRequest
0 голосов
/ 19 сентября 2018

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

Итак, возьмите следующую структуру проекта (я пытался быть аналогом документации Pytest ):

project_structure

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 Ответ

0 голосов
/ 19 сентября 2018

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

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

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

...