Возможно ли создать исходный дистрибутив с помощью python setup.py sdist
без использования каких-либо файлов __init__.py
в каждом пакете (python 3. 5+)? Я действительно хотел бы просто использовать пакеты пространства имен, чтобы избежать избыточности и накладных расходов. Все вложенные .py
-files во всех подпакетах должны быть включены.
Поэтому возьмите следующую структуру проекта (я пытался быть аналогичным документации pytest):
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
: Будет ли рассмотренная выше процедура хорошей/современной практикой?
Привет
Вместо find_packages
вы хотите find_namespace_packages
(ранее известный как find_packages_ns
).
Требуется последняя версия setuptools; функция была добавлена в версии 40.1.0, выпущенной в августе 2018 года.
Вам также необходимо быть осторожным, чтобы вы не включали каталоги, которые не предназначены для пакетов, а вот where='src'
которые у вас уже есть, должны позаботиться об этом.
pip install setuptools --upgrade
раньше.
__init__.py
в каталоги, и они волшебным образом станут пакетами. Не волнуйтесь, они не байт!