Hub Python Library documentation
Корзины
Корзины
Buckets обеспечивают объектное хранилище, аналогичное S3, на Hugging Face, работающее на базе системы хранения Xet. В отличие от репозиториев (которые основаны на git и отслеживают историю файлов), buckets представляют собой удалённые контейнеры объектного хранилища, предназначенные для работы с файлами большого размера с дедупликацией на основе контрольных сумм содержимого. Они созданы для сценариев, где требуется простое, быстрое и изменяемое хранилище, например, для сохранения контрольных точек обучения, журналов, промежуточных артефактов или любых больших коллекций файлов, не требующих контроля версий.
Вы можете работать с бакетами с помощью Python API (HfApi) или CLI (hf buckets). В этом руководстве мы рассмотрим все доступные операции.
Все команды CLI доступны в разделе
hf buckets <command>. Запуститеhf buckets --help, чтобы узнать больше.
Создание и управление бакетами
Создать бакет
Создайте бакет с помощью create_bucket(). Необходимо указать имя бакета. Если пространство имён не указано, бакет будет создан в вашем пользовательском имени.
>>> from huggingface_hub import create_bucket
# Create a bucket under your namespace
>>> url = create_bucket("my-bucket")
>>> url.bucket_id
'username/my-bucket'
>>> url.uri.to_uri()
'hf://buckets/username/my-bucket'
# Create a private bucket
>>> create_bucket("my-private-bucket", private=True)
BucketUrl(...)
# Don't error if bucket already exists
>>> create_bucket("my-bucket", exist_ok=True)
BucketUrl(...)
# Create a bucket in a specific region
>>> create_bucket("my-bucket", region="us")
BucketUrl(...)Или через CLI:
>>> hf buckets create my-bucket
✓ Bucket created
uri: hf://buckets/Wauplin/my-bucket
url: https://huggingface.co/buckets/Wauplin/my-bucket
# Create a private bucket
>>> hf buckets create my-bucket --private
# Don't error if bucket already exists
>>> hf buckets create my-bucket --exist-ok
# Create a bucket in a specific region
>>> hf buckets create my-bucket --region usВы также можете указать полный формат namespace/bucket_name, чтобы создать бакет в рамках организации:
>>> from huggingface_hub import create_bucket
>>> create_bucket("my-org/shared-bucket")Или через CLI:
>>> hf buckets create my-org/shared-bucketПолучить информацию о бакете
Используйте bucket_info(), чтобы получить метаданные о бакете, включая его видимость, общий размер, количество файлов и дату создания.
>>> from huggingface_hub import bucket_info
>>> bucket_info("username/my-bucket")
BucketInfo(
id='username/my-bucket',
private=False,
created_at=datetime.datetime(2026, 2, 12, 17, 42, 12,
tzinfo=datetime.timezone.utc),
size=8411791508,
total_files=128
)Или через CLI:
# JSON output
>>> hf buckets info username/my-bucket
{
"id": "username/my-bucket",
"private": false,
...
}Список бакетов
Используйте list_buckets(), чтобы получить список всех бакетов в пространстве имён. По умолчанию выводятся бакеты в пространстве имён текущего пользователя.
>>> from huggingface_hub import list_buckets
# List your own buckets
>>> for bucket in list_buckets():
... print(bucket.id, bucket.size, bucket.total_files)
# List buckets in an organization
>>> for bucket in list_buckets(namespace="huggingface"):
... print(bucket.id)Или через CLI (hf buckets ls — сокращение от hf buckets list):
# Table format (default)
>>> hf buckets list
ID PRIVATE SIZE TOTAL_FILES CREATED_AT
-------------------- ------- --------- ----------- ----------
username/my-bucket 32 5 2026-02-16
username/checkpoints 117609095 700 2026-02-13
username/logs 321757477 2000 2026-02-13
# Human-readable sizes
>>> hf buckets list -h
ID PRIVATE SIZE TOTAL_FILES CREATED_AT
-------------------- ------- -------- ----------- ----------
username/my-bucket 32 B 5 2026-02-16
username/checkpoints 117.6 MB 700 2026-02-13
username/logs 321.8 MB 2000 2026-02-13
# List buckets in a specific namespace
>>> hf buckets ls huggingface
# Filter buckets by name
>>> hf buckets list --search "checkpoint"Вы также можете фильтровать бакеты по имени с помощью search:
>>> for bucket in list_buckets(search="checkpoint"):
... print(bucket.id)Вы можете использовать параметры --quiet и --format json, чтобы получить вывод в другом формате. Это особенно полезно, если вы хотите передать вывод в другой инструмент, например grep или jq.
# Quiet mode: prints one bucket ID per line
>>> hf buckets list --quiet
username/my-bucket
username/checkpoints
username/logs
# JSON format
>>> hf buckets list --format json
[
{
"id": "username/my-bucket",
"private": false,
"created_at": "2026-02-16T15:28:32+00:00",
"size": 32,
"total_files": 5
},
...
]Изменение видимости хранилища
Используйте update_bucket_settings(), чтобы переключить существующее хранилище между приватным и публичным режимами.
>>> from huggingface_hub import update_bucket_settings
# Make a bucket private
>>> update_bucket_settings("username/my-bucket", private=True)
# Make it public again
>>> update_bucket_settings("username/my-bucket", private=False)Или через CLI:
# Make a bucket private
>>> hf buckets settings username/my-bucket --private
✓ Bucket settings updated
bucket_id: username/my-bucket
private: True
# Make it public again
>>> hf buckets settings username/my-bucket --publicУдаление хранилища
Используйте delete_bucket() для удаления бакета. Эта операция необратима.
>>> from huggingface_hub import delete_bucket
>>> delete_bucket("username/my-bucket")
# Don't error if bucket doesn't exist
>>> delete_bucket("username/my-bucket", missing_ok=True)Или через CLI:
# Prompts for confirmation
>>> hf buckets delete username/my-bucket
# Skip confirmation
>>> hf buckets delete username/my-bucket --yes
# Don't error if bucket doesn't exist
>>> hf buckets delete username/my-bucket --yes --missing-okУдаление файлов
Используйте batch_bucket_files() с параметром delete, чтобы удалить файлы из бакета:
>>> from huggingface_hub import batch_bucket_files
# Delete specific files
>>> batch_bucket_files("username/my-bucket", delete=["old-model.bin", "logs/debug.log"])Или через CLI с помощью hf buckets rm (или hf buckets remove):
# Remove a single file
>>> hf buckets rm username/my-bucket/old-model.bin
# Remove all files under a prefix (requires --recursive)
>>> hf buckets rm username/my-bucket/logs/ --recursive
# Remove only files matching a pattern across the entire bucket
>>> hf buckets rm username/my-bucket --recursive --include "*.tmp"
# Exclude specific files from removal
>>> hf buckets rm username/my-bucket/data/ --recursive --exclude "*.safetensors"
# Preview what would be deleted
>>> hf buckets rm username/my-bucket/checkpoints/ --recursive --dry-runПереместить бакет
Используйте move_bucket(), чтобы переместить или переименовать бакет. Вы можете переименовать его в том же пространстве имён или перенести в другое пространство имён (пользователь или организация).
>>> from huggingface_hub import move_bucket
# Rename a bucket
>>> move_bucket(from_id="username/old-name", to_id="username/new-name")
# Transfer to an organization
>>> move_bucket(from_id="username/my-bucket", to_id="my-org/my-bucket")Или через CLI:
# Rename a bucket
>>> hf buckets move username/old-bucket username/new-bucket
# Transfer to an organization
>>> hf buckets move username/my-bucket my-org/my-bucket
# Using the hf://buckets/ format
>>> hf buckets move hf://buckets/username/old-bucket hf://buckets/username/new-bucketДля получения дополнительной информации о перемещении репозиториев и бакетов см. документацию Hub.
Просмотр содержимого хранилища
Список файлов
Используйте list_bucket_tree() для получения списка файлов и каталогов в бакете.
>>> from huggingface_hub import list_bucket_tree
# List all files
>>> for item in list_bucket_tree("username/my-bucket"):
... print(item.path, item.size)
file.txt 5
big.bin 2048
sub/nested.txt 14
sub/deep/file.txt 4
# List top-level entries only
>>> for item in list_bucket_tree("username/my-bucket", recursive=False):
... print(item.type, item.path)
file file.txt
file big.bin
directory sub
# Filter by prefix
>>> for item in list_bucket_tree("username/my-bucket", prefix="sub"):
... print(item.path)Или через CLI, с поддержкой форматов таблицы, читаемого человеком и ASCII-дерева. По умолчанию CLI работает в нерекурсивном режиме.
# Default table format (non-recursive, directories shown as entries)
>>> hf buckets list username/my-bucket
2048 2026-01-15 10:30:00 big.bin
5 2026-01-15 10:30:00 file.txt
2026-01-15 10:30:00 sub/
# Recursive listing (all files, including nested)
>>> hf buckets list username/my-bucket -R
2048 2026-01-15 10:30:00 big.bin
5 2026-01-15 10:30:00 file.txt
14 2026-01-15 10:30:00 sub/nested.txt
4 2026-01-15 10:30:00 sub/deep/file.txt
# Human-readable sizes and short dates
>>> hf buckets list username/my-bucket -R -h
2.0 KB Jan 15 10:30 big.bin
5 B Jan 15 10:30 file.txt
14 B Jan 15 10:30 sub/nested.txt
4 B Jan 15 10:30 sub/deep/file.txt
# ASCII tree format
>>> hf buckets list username/my-bucket --tree -h -R
2.0 KB Jan 15 10:30 ├── big.bin
5 B Jan 15 10:30 ├── file.txt
└── sub/
├── deep/
4 B Jan 15 10:30 │ └── file.txt
14 B Jan 15 10:30 └── nested.txt
# Tree structure only (no sizes/dates)
>>> hf buckets list username/my-bucket --tree --quiet -R
├── big.bin
├── file.txt
└── sub/
├── deep/
│ └── file.txt
└── nested.txt
# Quiet mode: one path per line
>>> hf buckets list username/my-bucket -q
big.bin
file.txt
sub/
# Filter by prefix
>>> hf buckets list username/my-bucket/sub -RКоманда
hf buckets listпринимает в качестве аргументов как краткий формат (username/my-bucket/sub), так и полный идентификатор (hf://buckets/username/my-bucket/sub).
Перечисление содержимого бакета с помощью HfFileSystem кэшируется. Чтобы списки обновлялись по мере добавления, изменения и удаления файлов в бакете другими участниками, передайте
HfFileSystem(live_follow=True), см. руководство по файловой системе.
Загрузка файлов
Загрузка с помощью Python
Используйте batch_bucket_files() для загрузки файлов в бакет. Загрузка возможна из локальных путей к файлам или из сырых байтов:
>>> from huggingface_hub import batch_bucket_files
# Upload from local file paths
>>> batch_bucket_files(
... "username/my-bucket",
... add=[
... ("./model.safetensors", "models/model.safetensors"),
... ("./config.json", "models/config.json"),
... ],
... )
# Upload from raw bytes
>>> batch_bucket_files(
... "username/my-bucket",
... add=[
... (b'{"key": "value"}', "config.json"),
... ],
... )Вы также можете копировать файлы xet из другого хранилища или репозитория с помощью параметра copy. Это серверная операция — данные не скачиваются и не загружаются повторно:
# Copy files by xet hash (source_repo_type, source_repo_id, xet_hash, destination)
>>> batch_bucket_files(
... "username/my-bucket",
... copy=[
... ("bucket", "username/source-bucket", "<xethash_1>", "models/model.safetensors"),
... ("model", "username/my-model", "<xethash_2>", "models/config.safetensors"),
... ],
... )Хеши Xet можно получить с помощью list_repo_tree.
Вы также можете удалять файлы во время загрузки других.
# Upload and delete in one batch
>>> batch_bucket_files(
... "username/my-bucket",
... add=[("./new-model.safetensors", "model.safetensors")],
... delete=["old-model.bin"],
... )Вызовы batch_bucket_files() не являются транзакционными. Если в процессе возникает ошибка, часть файлов может быть загружена, скопирована или удалена, тогда как другие — нет. Когда сервер сообщает о неудаче некоторых операций, возникает
BucketBatchError, в атрибутеfailuresкоторого указаны пути к неудавшимся операциям.
Загрузка одного файла с помощью CLI
Используйте hf buckets cp для загрузки одного файла:
hf buckets cp— это псевдоним для универсальной командыhf cp(также доступной какhf repos cp). Все три команды идентичны, поэтому любой пример сhf buckets cpниже также работает сhf cp.
# Upload to bucket root (uses local filename as remote name)
>>> hf buckets cp ./config.json hf://buckets/username/my-bucket
# Upload to a subdirectory
>>> hf buckets cp ./data.csv hf://buckets/username/my-bucket/logs/
# Upload with a different remote filename
>>> hf buckets cp ./model.safetensors hf://buckets/username/my-bucket/v2/model.safetensorsВы также можете передать результат команды напрямую в новый файл с помощью -:
# Upload from stdin
>>> echo "hello" | hf buckets cp - hf://buckets/username/my-bucket/hello.txt
>>> cat model.safetensors | hf buckets cp - hf://buckets/username/my-bucket/model.safetensorsЗагрузка каталога с помощью CLI
Используйте hf buckets sync, чтобы загрузить всю локальную директорию в бакет:
# Upload a local directory to a bucket
>>> hf buckets sync ./data hf://buckets/username/my-bucket
# Upload to a specific prefix in the bucket
>>> hf buckets sync ./data hf://buckets/username/my-bucket/trainСм. раздел Синхронизация каталогов ниже для полного набора вариантов синхронизации.
Загрузка файлов
Загрузка с помощью Python
Используйте download_bucket_files() для загрузки файлов из хранилища:
>>> from huggingface_hub import download_bucket_files
# Download specific files by path
>>> download_bucket_files(
... "username/my-bucket",
... files=[
... ("models/model.safetensors", "./local/model.safetensors"),
... ("config.json", "./local/config.json"),
... ],
... )Для повышения производительности вместо строковых путей можно передавать объекты BucketFile, полученные с помощью list_bucket_tree(). Это позволяет пропустить этап получения метаданных:
>>> from huggingface_hub import list_bucket_tree, download_bucket_files
# List and filter files, then download
>>> parquet_files = [
... item for item in list_bucket_tree("username/my-bucket", recursive=True)
... if item.type == "file" and item.path.endswith(".parquet")
... ]
>>> download_bucket_files(
... "username/my-bucket",
... files=[(f, f"./local/{f.path}") for f in parquet_files],
... )Загрузка одного файла с помощью CLI
Используйте hf buckets cp для загрузки одного файла:
# Download to a specific file
>>> hf buckets cp hf://buckets/username/my-bucket/config.json ./config.json
# Download to a directory (uses original filename)
>>> hf buckets cp hf://buckets/username/my-bucket/config.json ./data/
# Download to current directory (omit destination)
>>> hf buckets cp hf://buckets/username/my-bucket/config.jsonВы также можете передать содержимое файла напрямую в stdout, используя -:
# Download to stdout and pretty-print with jq
>>> hf buckets cp hf://buckets/username/my-bucket/config.json - | jq .Загрузка каталога с помощью CLI
Используйте hf buckets sync, чтобы скачать все файлы из бакета в локальный каталог:
# Download bucket contents to a local directory
>>> hf buckets sync hf://buckets/username/my-bucket ./data
# Download only a specific prefix
>>> hf buckets sync hf://buckets/username/my-bucket/models ./local-modelsСм. раздел Синхронизация каталогов ниже для полного набора вариантов синхронизации.
Копирование файлов в Bucket
Используйте copy_files(), чтобы скопировать файлы, уже размещённые на Hub, в Bucket:
>>> from huggingface_hub import copy_files
# Bucket to bucket (same or different bucket)
>>> copy_files(
... "hf://buckets/username/source-bucket/checkpoints/model.safetensors",
... "hf://buckets/username/destination-bucket/archive/model.safetensors",
... )
# Repo to bucket
>>> copy_files(
... "hf://datasets/username/my-dataset/processed/",
... "hf://buckets/username/my-bucket/datasets/processed/",
... )То же самое доступно из CLI через унифицированную команду hf cp (также доступна как hf buckets cp и hf repos cp — все три идентичны):
# Bucket to bucket
>>> hf cp hf://buckets/username/source-bucket/logs/ hf://buckets/username/destination-bucket/logs/
# Repo to bucket
>>> hf cp hf://username/my-model/config.json hf://buckets/username/my-bucket/models/config.jsonПри копировании папок завершающий / в пути источника использует семантику в стиле rsync — копируются только содержимое папки, без вложенности самой папки:
# Without trailing slash: "logs" dir is nested => destination/logs/...
>>> hf cp hf://buckets/username/source-bucket/logs hf://buckets/username/destination-bucket/
# With trailing slash: only contents of "logs" are copied => destination/...
>>> hf cp hf://buckets/username/source-bucket/logs/ hf://buckets/username/destination-bucket/Примечания:
- Копирование из бакета в репозиторий пока не поддерживается.
- Копии на стороне сервера работают только в пределах одной и той же области хранения.
- Файлы, отслеживаемые с помощью Xet (в баках или репозиториях), копируются на стороне сервера по хэшу — данные не скачиваются и не загружаются повторно.
- Небольшие текстовые файлы, не отслеживаемые Xet в источниках репозитория, загружаются и повторно выгружаются в целевое хранилище.
- copy_files() также можно использовать для копирования между репозиториями. Подробнее см. в руководстве по репозиториям.
Синхронизация каталогов
Команда hf buckets sync (и её эквивалент в API sync_bucket()) — самый мощный способ передачи файлов между локальным каталогом и бакетом. Она сравнивает источник и назначение и передаёт только те файлы, которые изменились.
Базовая синхронизация
# Upload: local directory -> bucket
>>> hf buckets sync ./data hf://buckets/username/my-bucket
# Download: bucket -> local directory
>>> hf buckets sync hf://buckets/username/my-bucket ./data
hf sync— это удобный псевдоним дляhf buckets sync. Обе команды идентичны.>>> hf sync ./data hf://buckets/username/my-bucket
Или через Python:
>>> from huggingface_hub import sync_bucket
# Upload: local directory -> bucket
>>> sync_bucket("./data", "hf://buckets/username/my-bucket")
# Download: bucket -> local directory
>>> sync_bucket("hf://buckets/username/my-bucket", "./data")Удаление лишних файлов
По умолчанию sync добавляет или обновляет файлы. Используйте --delete (или delete=True в Python), чтобы также удалять файлы в пункте назначения, которых нет в источнике:
# Upload and remove remote files not present locally
>>> hf buckets sync ./data hf://buckets/username/my-bucket --delete
# Download and remove local files not present in bucket
>>> hf buckets sync hf://buckets/username/my-bucket ./data --deleteИли через Python:
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", delete=True)
>>> sync_bucket("hf://buckets/username/my-bucket", "./data", delete=True)Фильтрация
Вы можете управлять синхронизацией файлов с помощью шаблонов включения/исключения:
# Only sync .txt files
>>> hf buckets sync ./data hf://buckets/username/my-bucket --include "*.txt"
# Exclude log files
>>> hf buckets sync ./data hf://buckets/username/my-bucket --exclude "*.log"
# Combine include and exclude
>>> hf buckets sync ./data hf://buckets/username/my-bucket --include "*.safetensors" --exclude "*.tmp"Или через Python:
# Only sync .txt files
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", include=["*.txt"])
# Exclude log files
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", exclude=["*.log"])
# Combine include and exclude
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", include=["*.safetensors"], exclude=["*.tmp"])Для более сложной фильтрации используйте файл фильтра с --filter-from (или filter_from в Python):
>>> hf buckets sync ./data hf://buckets/username/my-bucket --filter-from filters.txtФайл фильтров использует префиксы + (включить) и - (исключить). Строки, начинающиеся с #, являются комментариями. Правила оцениваются по порядку (действует первое подходящее правило):
# filters.txt - *.log - *.tmp + *.safetensors + *.json
Режимы сравнения
По умолчанию sync сравнивает файлы по размеру и времени изменения. Вы можете настроить это поведение:
# Only compare sizes (ignore modification times)
>>> hf buckets sync ./data hf://buckets/username/my-bucket --ignore-times
# Only compare modification times (ignore sizes)
>>> hf buckets sync ./data hf://buckets/username/my-bucket --ignore-sizes
# Only update files that already exist on the receiver (skip new files)
>>> hf buckets sync ./data hf://buckets/username/my-bucket --existing
# Only create new files (skip files that already exist on the receiver)
>>> hf buckets sync ./data hf://buckets/username/my-bucket --ignore-existingИли через Python:
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", ignore_times=True)
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", ignore_sizes=True)
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", existing=True)
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", ignore_existing=True)Планирование и применение
Для критически важных операций вы можете просмотреть план синхронизации перед его выполнением:
# Step 1: Generate a plan file (nothing is transferred)
>>> hf buckets sync ./data hf://buckets/username/my-bucket --plan sync-plan.jsonl
Sync plan: ./data -> hf://buckets/username/my-bucket
Uploads: 3
Downloads: 0
Deletes: 0
Skips: 1
Plan saved to: sync-plan.jsonl
# Step 2: Review the plan file (JSONL format)
>>> cat sync-plan.jsonl
# Step 3: Apply the plan
>>> hf buckets sync --apply sync-plan.jsonlИли через Python:
# Step 1: Generate a plan file (nothing is transferred)
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", plan="sync-plan.jsonl")
# Step 2: Review the plan file (JSONL format), then apply
>>> sync_bucket(apply="sync-plan.jsonl")Файл плана представляет собой JSONL-файл, в котором заголовок сопровождается строкой для каждой операции. Каждая операция включает действие (
upload,download,deleteилиskip), путь к файлу и причину выполнения действия. Вы можете отредактировать этот файл вручную перед применением, но будьте внимательны к синтаксису.
Тестовый прогон
Используйте --dry-run (или dry_run=True в Python), чтобы получить план синхронизации без выполнения каких-либо действий:
# Preview what would be synced
>>> hf buckets sync ./data hf://buckets/username/my-bucket --dry-run | jq '.action'Или через Python:
>>> plan = sync_bucket("./data", "hf://buckets/username/my-bucket", dry_run=True)
>>> plan.summary()
{'uploads': 3, 'downloads': 0, 'deletes': 0, 'skips': 1, 'total_size': 4096}
--dry-runвыводит тот же формат JSONL, что и--plan, но печатает его в stdout, а не сохраняет в файл. Печатается только содержимое JSONL, что делает безопасным использование конвейеров (pipe).
Говорливый и тихий режимы
# Show per-file operations
>>> hf buckets sync ./data hf://buckets/username/my-bucket --verbose
# Suppress all output
>>> hf buckets sync ./data hf://buckets/username/my-bucket --quietИли через Python:
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", verbose=True)
>>> sync_bucket("./data", "hf://buckets/username/my-bucket", quiet=True)Дополнительно
Для задач более низкого уровня также доступны следующие методы:
- get_bucket_paths_info(): Получает информацию о конкретных путях в бакете в одном пакетном запросе. Полезно, когда точно известно, для каких файлов нужны метаданные.
>>> from huggingface_hub import get_bucket_paths_info
>>> for info in get_bucket_paths_info("username/my-bucket", ["file.txt", "models/model.safetensors"]):
... print(info.path, info.size, info.xet_hash)- get_bucket_file_metadata(): получает метаданные (размер и данные xet) для одного файла. Используется внутри download_bucket_files().
>>> from huggingface_hub import get_bucket_file_metadata
>>> metadata = get_bucket_file_metadata("username/my-bucket", "models/model.safetensors")
>>> metadata.size
42000