Вопрос или проблема
У меня есть простой файл pyproject, использующий setuptools для пакета с src-структурой (с использованием автоматического обнаружения).
Недавно я добавил директорию docs. Я думал, что автоматическое обнаружение подберет её и добавит в исходный пакет, но этого не произошло. Это нормально?
Если это нормально, то что мне делать, чтобы включить директорию docs в исходный пакет?
Я собрал пакет с существующим pyproject.toml, и он создал исходный пакет, который не включал директорию docs.
Структура каталогов:
.
├── AUTHORS
├── docs
│ ├── example1.md
│ └── example2.md
├── LICENSE
├── pyproject.toml
├── README.md
├── src
│ └── vtjson
│ ├── __init__.py
│ └── vtjson.py
└── tests
└── test_vtjson.py
Файл pyproject:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "vtjson"
dynamic = ["version"]
authors = [
{ name="Michel Van den Bergh", email="[email protected]" },
]
description = "Легковесный пакет для валидации объектов Python, подобных JSON"
readme = "README.md"
dependencies = ["dnspython", "email_validator", "idna", "python-magic", "typing_extensions"]
requires-python = ">=3.7"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
[tool.setuptools]
#py-modules = ["vtjson"]
[tool.setuptools.dynamic]
version = {attr = "vtjson.vtjson.__version__"}
[project.urls]
"Homepage" = "https://github.com/vdbergh/vtjson"
"Bug Tracker" = "https://github.com/vdbergh/vtjson/issues"
Ответ или решение
Для того чтобы включить директорию docs
в сборку вашего пакета, вам необходимо внести изменения в файл pyproject.toml
. По умолчанию setuptools
не включает такие директории, как docs
, в создаваемый пакет. Это связано с тем, что setuptools
настроен для автоматического поиска только Python-модулей и пакетов, находящихся в корневом каталоге или в каталоге src
.
Шаги для включения директории docs
в сборку
-
Создайте файл
MANIFEST.in
: Это файл, в котором вы можете указать, какие дополнительные файлы и директории должны быть включены в сгенерированные пакеты. В вашем случае, вы хотите добавить директориюdocs
. Создайте файлMANIFEST.in
в корневом каталоге вашего проекта и добавьте следующие строки:recursive-include docs *
Это указывает, что все файлы внутри директории
docs
должны быть включены в источник. -
Обновите
pyproject.toml
: Вам не нужно вносить значительных изменений в файлpyproject.toml
для этой задачи, но убедитесь, что он корректен и настроен для работы сsetuptools
. Убедитесь, что у вас есть следующая секция (что вы уже сделали):[tool.setuptools]
Если вам нужно, вы также можете добавить любые другие параметры, кавычки и строки, относящиеся к вашему проекту.
-
Пересоберите пакет: После внесения изменений в
MANIFEST.in
, пересоберите ваш пакет, чтобы убедиться, что директорияdocs
теперь включена. Вы можете осуществить это с помощью команды:python -m build
-
Проверьте результаты сборки: После сборки проверьте созданные архивы пакета (например,
.tar.gz
или.whl
), чтобы убедиться, что директорияdocs
была включена в сборку.
Заключение
Использование файла MANIFEST.in
представляет собой стандартный метод добавления дополнений в ваш пакет, когда вы работаете с setuptools
. Это позволяет вам иметь в своём пакете не только код, но и документацию или другие ресурсы, необходимые пользователям вашего пакета.
Следуя этим инструкциям, вы будете способны успешно включить директорию docs
в сборку вашего Python-проекта, обеспечивая тем самым более высокое качество и доступность вашей документации для конечных пользователей.