Локальная разработка
Как установить и запустить Potato локально для разработки и тестирования: установка через pip, настройка конфигурации, запуск сервера и частые проблемы при старте.
Как запустить Potato на своей машине для разработки и тестирования.
Что понадобится
- Python 3.9 или новее
- менеджер пакетов pip
- Git (необязательно, чтобы клонировать примеры)
Установка
Через pip (рекомендуется)
pip install potato-annotationИз исходного кода
git clone https://github.com/davidjurgens/potato.git
cd potato
pip install -e .С необязательными зависимостями
# Local speech-to-text and diarization for transcript projects
pip install "potato-annotation[transcribe]"
# Hosted model providers for AI support and active learning
pip install "potato-annotation[ai]"
# Everything except the multi-gigabyte server-side vision stack
pip install "potato-annotation[all]"Берите имя дополнения в кавычки, чтобы оболочка не приняла квадратные скобки за шаблон glob. all намеренно не включает vision, потому что эта группа тянет за собой torch, а в обычной работе он ни для чего не нужен.
Быстрый старт
1. Создайте файл конфигурации
Создайте config.yaml:
annotation_task_name: "My First Annotation Task"
task_dir: "."
port: 8000
data_files:
- data.json
item_properties:
id_key: id
text_key: text
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the sentiment?"
labels:
- Positive
- Negative
- Neutral
output_annotation_dir: "annotations/"task_dir задаёт корень, относительно которого разрешаются все остальные относительные пути, и читать что-либо за его пределами Potato отказывается. Значение . держит конфигурацию, файл данных и выходной каталог в одной папке, и именно поэтому проект потом можно перенести на сервер.
2. Подготовьте пример данных
Создайте data.json:
[
{"id": "1", "text": "I love this product!"},
{"id": "2", "text": "This is terrible."},
{"id": "3", "text": "It's okay, nothing special."}
]3. Запустите сервер
potato start config.yaml4. Откройте интерфейс
Откройте в браузере http://localhost:8000
Режим разработки
Режим отладки
Режим отладки включает подробный журнал, отключает тайм-аут простоя сессии и открывает админ-страницы без ключа для запросов с вашей собственной машины. Страница входа остаётся, а --debug-phase (см. ниже) её пропускает:
potato start config.yaml --debugНикогда не включайте режим отладки на развёрнутом сервере. Туннель или обратный прокси на той же машине, который не добавляет заголовок пересылки, делает любого обратившегося локальным, а --debug-phase впускает каждого посетителя под одним и тем же debug_user. Potato с 2.8.2 по 2.11.0 отказывается запускаться в режиме отладки на адресе по умолчанию 0.0.0.0, поэтому в этих версиях добавьте --host 127.0.0.1.
Журнал отладки
Выберите, какая часть приложения пишет в журнал:
potato start config.yaml --debug-log serverДопустимые значения: all, ui, server и none. Используйте ui, когда странно ведёт себя страница разметки, и server, когда не загружается объект.
Подробный вывод
Чтобы видеть всю активность сервера:
potato start config.yaml --verboseПереход сразу к фазе
С включённым --debug можно пропустить вход и попасть прямо в фазу, над которой вы работаете, а не проходить согласие и инструкции при каждом перезапуске:
potato start config.yaml --debug --debug-phase annotationСтруктура каталогов
Рекомендуемая структура проекта:
my-annotation-project/
├── config.yaml # Main configuration, inside task_dir
├── data/
│ ├── training.json # Practice items for the training phase
│ └── main.json # Annotation data
├── annotations/ # output_annotation_dir
├── media/ # media_directory, served at /media/
└── templates/ # site_dir, if you override the default templates
Обязательны только config.yaml и файл данных. Potato поставляется со своими шаблонами, поэтому задавайте site_dir и добавляйте папку templates/ только тогда, когда заменяете их, а site_file указывайте на конкретный файл, которым нужно отрисовывать страницу разметки.
Проверка конфигурации
Валидация конфигурации
Проверьте конфигурацию так же, как её проверяет сервер при запуске, прежде чем тратить на неё запуск:
potato validate config.yamlС --strict предупреждения, например о нераспознанном ключе, проваливают проверку, а не просто печатаются.
Режим предпросмотра
Чтобы увидеть, что объявляет конфигурация, и отрисовать её в браузере без запуска полноценного сервера:
potato preview config.yamlДля скриншотов нужно дополнение с headless-браузером, pip install "potato-annotation[preview]":
potato preview config.yaml --screenshot preview.pngЧастые проблемы
Порт уже занят
# Use a different port
potato start config.yaml -p 8080Или задайте порт в config.yaml, и тогда флаг -p будет его переопределять:
port: 8080Файл данных не найден
Убедитесь, что пути указаны относительно расположения файла конфигурации:
# If data is in a subdirectory
data_files:
- data/main.jsonПути разрешаются относительно task_dir, и загружать файл за его пределами Potato отказывается, поэтому перенесите данные внутрь каталога задачи, а не указывайте абсолютный путь куда-то ещё на машине.
Отказано в доступе
Проверьте права доступа к файлам:
chmod 755 annotations/
chmod 644 data/*.jsonНесколько пользователей локально
Чтобы проверить сценарии с несколькими пользователями:
user_config:
allow_all_users: true
login:
type: url_direct
url_argument: user_idurl_direct берёт имя пользователя прямо из URL и пароля не спрашивает, так что можно открыть два профиля браузера и размечать как два разных человека, не регистрируя учётные записи:
http://localhost:8000/?user_id=annotator1http://localhost:8000/?user_id=annotator2
Сброс разметки
Potato создаёт под output_annotation_dir по каталогу на каждого разметчика, и в каждом лежит user_state.json этого человека:
# Remove one annotator's work
rm -rf annotations/annotator1
# Or clear every annotator
rm -rf annotations/*
# Restart server
potato start config.yamlВместе с каталогом пользователя удаляются и его назначения, и его ответы, так что при новом запуске объекты назначаются с нуля.
Переменные окружения
Настройка через окружение:
# Keeps sessions valid across restarts; required for OAuth
export POTATO_SECRET_KEY="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
# Fixes the shared admin key instead of letting Potato generate one per task
export POTATO_ADMIN_API_KEY="your-admin-key"
potato start config.yamlБез POTATO_SECRET_KEY Potato при каждом запуске генерирует случайный ключ подписи, и каждый перезапуск разлогинивает всех.
Виртуальные окружения
venv
python -m venv potato-env
source potato-env/bin/activate # Linux/Mac
potato-env\Scripts\activate # Windows
pip install potato-annotationConda
conda create -n potato python=3.10
conda activate potato
pip install potato-annotationИнтеграция с IDE
VS Code
Установите расширение YAML, чтобы редактор понимал файл конфигурации:
// settings.json
{
"yaml.schemas": {
"https://potatoannotator.readthedocs.io/en/latest/schemas/potato-config.schema.json": "config.yaml"
}
}Конфигурации, скачанные из песочницы, уже несут эту схему в строке # yaml-language-server:, поэтому проверяются в редакторе и без этой настройки.
PyCharm
Настройте конфигурацию запуска:
- Add → Python
- Скрипт:
potato - Параметры:
start config.yaml - Рабочий каталог: путь к вашему проекту
Что дальше
- Основы конфигурации: все параметры конфигурации
- Форматы данных: как устроены данные
- Production-настройка: развёртывание для реальной работы