add readme
This commit is contained in:
@@ -0,0 +1,98 @@
|
|||||||
|
# py-export-api-docs
|
||||||
|
|
||||||
|
Экспорт Markdown-документации API для пакетов из `requirements.txt`.
|
||||||
|
|
||||||
|
Скрипт создаёт временное виртуальное окружение (не трогает системный Python), устанавливает зависимости и генерирует документацию через [pydoc-markdown](https://github.com/NiklasRosenstein/pydoc-markdown) 4.x.
|
||||||
|
|
||||||
|
## Требования
|
||||||
|
|
||||||
|
- Python 3 с модулем `venv` (на Debian/Ubuntu: `python3-venv`)
|
||||||
|
- `pip` внутри создаваемого venv (устанавливается автоматически)
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
Запускайте из каталога, куда нужно положить папку `docs/`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./py-export-api-docs.py requirements.txt
|
||||||
|
./py-export-api-docs.py /path/to/requirements.txt --recreate-venv
|
||||||
|
./py-export-api-docs.py requirements.txt --strict
|
||||||
|
```
|
||||||
|
|
||||||
|
Или через интерпретатор:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 py-export-api-docs.py requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Опции
|
||||||
|
|
||||||
|
| Опция | Описание |
|
||||||
|
|-------|----------|
|
||||||
|
| `requirements` | Путь к файлу `requirements.txt` (обязательный аргумент) |
|
||||||
|
| `--venv-dir PATH` | Каталог виртуального окружения. По умолчанию: `/tmp/export-api-docs-<uid>-<hash>`, где `hash` — SHA256 от текущей рабочей директории |
|
||||||
|
| `--recreate-venv` | Удалить и пересоздать venv, переустановить пакеты |
|
||||||
|
| `--strict` | Завершить с кодом 1, если хотя бы один пакет или модуль не удалось экспортировать |
|
||||||
|
|
||||||
|
## Результат
|
||||||
|
|
||||||
|
В текущей рабочей директории создаётся:
|
||||||
|
|
||||||
|
```
|
||||||
|
docs/
|
||||||
|
├── README.md # индекс: таблица модулей и ссылок
|
||||||
|
├── <import-module>/
|
||||||
|
│ └── api.md # документация модуля
|
||||||
|
└── ...
|
||||||
|
```
|
||||||
|
|
||||||
|
Для каждого пакета определяются корневые import-модули (из `top_level.txt` в метаданных дистрибутива, из встроенных fallback-таблиц или по эвристике). Каждый модуль экспортируется один раз, даже если несколько пакетов его предоставляют.
|
||||||
|
|
||||||
|
## Поддерживаемые строки requirements.txt
|
||||||
|
|
||||||
|
**Обрабатываются:**
|
||||||
|
|
||||||
|
- PEP 508 спецификации имён пакетов (`requests>=2.28`, `flask[async]`, с маркерами окружения после `;`)
|
||||||
|
- Включения `-r other.txt` — только если файл лежит внутри дерева каталога, где находится корневой `requirements.txt`
|
||||||
|
|
||||||
|
**Устанавливаются pip'ом, но не экспортируются** (имя пакета не извлекается):
|
||||||
|
|
||||||
|
- `-e` (editable installs)
|
||||||
|
- Прямые URL и прочие pip-опции, начинающиеся с `-`
|
||||||
|
|
||||||
|
## Кэширование venv
|
||||||
|
|
||||||
|
Переустановка пакетов пропускается, если:
|
||||||
|
|
||||||
|
- venv уже существует;
|
||||||
|
- хеш дерева requirements-файлов (все `-r` включения) совпадает с сохранённым в `.requirements.sha256` внутри venv.
|
||||||
|
|
||||||
|
При изменении `requirements.txt` или включённых файлов зависимости переустанавливаются автоматически. Флаг `--recreate-venv` принудительно пересоздаёт окружение.
|
||||||
|
|
||||||
|
## Коды выхода
|
||||||
|
|
||||||
|
| Код | Причина |
|
||||||
|
|-----|---------|
|
||||||
|
| `0` | Документация экспортирована (в не-strict режиме допускаются предупреждения) |
|
||||||
|
| `1` | Файл requirements не найден; нет имён пакетов; ничего не экспортировано; или `--strict` и были ошибки |
|
||||||
|
|
||||||
|
## Предупреждения
|
||||||
|
|
||||||
|
Скрипт продолжает работу при частичных сбоях (без `--strict`):
|
||||||
|
|
||||||
|
- пакет не установился в venv;
|
||||||
|
- не удалось определить import-модуль;
|
||||||
|
- небезопасное имя модуля;
|
||||||
|
- ошибка `pydoc-markdown` при экспорте.
|
||||||
|
|
||||||
|
Для пакетов без `top_level.txt` используется guess по имени дистрибутива (`my-package ` → `my_lib`) или встроенные соответствия (`python-gitlab` → `gitlab`, `pyyaml` → `yaml`, `pillow` → `PIL` и др.).
|
||||||
|
|
||||||
|
## Пример вывода
|
||||||
|
|
||||||
|
```
|
||||||
|
Creating virtualenv: /tmp/export-api-docs-1000-a1b2c3d4e5f6
|
||||||
|
Installing packages into temporary virtualenv…
|
||||||
|
requests -> requests
|
||||||
|
wrote docs/requests/api.md (42 KiB)
|
||||||
|
Done. Documentation in /home/user/project/docs
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user