Упаковка Python: одиночный модуль с данными пакетаPython

Программы на Python
Anonymous
 Упаковка Python: одиночный модуль с данными пакета

Сообщение Anonymous »

Я хочу установить свой однофайловый модуль вместе с его файлом py.typed с помощью setuptools и pyproject.toml.
Я упаковываю однофайловый модуль Python, и до сих пор я использовал очень простой pyproject.toml:

Код: Выделить всё

[build-system]
requires = ["setuptools==80.9.0"]
build-backend = "setuptools.build_meta"

[project]
name = "sample"
version = 1.0.0
description = "Sample single-module"
Схема репозитория проекта довольно проста:

Код: Выделить всё

sample
├── pyproject.toml
└── sample.py
Модуль устанавливается в корень сайтов-пакетов и я могу использовать его так:

Код: Выделить всё

from sample import whatever
Проблема в том, что я хочу предоставить py.typed для этого модуля, поэтому новый макет репозитория следующий:

Код: Выделить всё

sample
├── pyproject.toml
├── py.typed
└── sample.py
и новый pyproject.toml читается так:

Код: Выделить всё

[build-system]
requires = ["setuptools==80.9.0"]
build-backend = "setuptools.build_meta"

[project]
name = "sample"
version = 1.0.0
description = "Sample single-module"

[tool.setuptools]
include-package-data = true
package-data = {"sample" = ["py.typed"]}
Конечно, setuptools по-прежнему устанавливает модуль в корень пакетов сайтов и не устанавливает файл данных py.typed. Я ожидал этого и не нашел для этого чистого решения, поэтому переключился на другой макет репозитория с пакетом и модулем, например:

Код: Выделить всё

sample
├── __init__.py
├── pyproject.toml
└── sample
├── __init__.py
├── py.typed
└── sample.py
Это работает, но заставляет меня использовать модуль как import sample.sample или из образца import sample, а я этого не хочу.
Есть ли альтернатива:
  • Прямой импорт, без пространства имен пакета.
  • Установка данных пакета.
    />
  • Избегать подкаталога модуля (не обязательно).
Я знаю об использовании __init__.py для импорта модуля, поэтому, когда я импортирую sample, фактически импортируется sample.sample, но мне интересны альтернативы.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ckage-data

Вернуться в «Python»