---
title: "boto3: настройка и работа с S3-совместимым хранилищем в Python"
description: "Подробное руководство по работе с boto3: установка, настройка доступа, подключение к S3-совместимому Object Storage, загрузка, скачивание, просмотр и удаление объектов."
---

# Python

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

[boto3](https://pypi.org/project/boto3/) — это официальный SDK от Amazon для работы с S3 на языке Python. С его помощью можно управлять объектами: загружать и скачивать файлы, получать списки объектов, работать с метаданными, выполнять мультипарт-загрузку и создавать подписанные URL.

## Установка

Для установки `boto3` используйте `pip`:

```bash
pip install boto3
```

После установки библиотека доступна для использования в Python-коде.

## Настройка доступа

При использовании `boto3` реквизиты доступа можно задать несколькими способами:

### Через файлы ~/.aws/config и ~/.aws/credentials

При использовании [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli) в домашней директории пользователя автоматически создается папка .aws с файлами, содержащими данные для подключения к S3. При необходимости эту папку и файлы можно создать вручную — без использования AWS CLI.  Файл `~/.aws/credentials` должен содержать такие данные:

```bash
[default]
aws_access_key_id = <ACCESS_KEY>
aws_secret_access_key = <SECRET_KEY>
```

И `~/.aws/config`:

```bash
[default]
output = json
endpoint_url = https://s3.twcstorage.ru
region = ru-1
```

При использовании профиля `default` дополнительная настройка в коде не требуется — `boto3` автоматически подхватит эти данные.

### Через переменные окружения

Реквизиты доступа можно задать с помощью переменных окружения:

```bash
export AWS_ACCESS_KEY_ID=<ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<SECRET_KEY>
```

### Через код приложения

Реквизиты можно передать напрямую при создании клиента S3:

```py
import boto3

s3 = boto3.client(
    "s3",
    aws_access_key_id="<ACCESS_KEY>",
    aws_secret_access_key="<SECRET_KEY>",
    endpoint_url="https://s3.twcstorage.ru",
    region_name="ru-1"
)
```

Этот способ не рекомендуется для продакшена, так как ключи доступа хранятся непосредственно в коде.

### Использование отдельных профилей

Если в файлах `~/.aws/config` и `~/.aws/credentials` настроено несколько профилей, можно явно указать нужный профиль при создании сессии:

```py
import boto3

session = boto3.Session(profile_name="myprofile")
s3 = session.client("s3")
```

Это удобно, если один и тот же код используется для работы с несколькими бакетами или окружениями.

## Пример

Рассмотрим, как при помощи SDK выполнять базовые операции с объектами. В этом примере скрипт:

-   загружает файл в бакет;
-   выводит список всех объектов;
-   скачивает загруженный файл под другим именем;
-   удаляет объект из хранилища.

Предварительно создайте файл с именем `example.txt` в той же директории, где находится скрипт.

Код скрипта:

```py
import boto3
import os

bucket_name = "имя_бакета"
endpoint_url = "https://s3.twcstorage.ru"
local_upload_path = "example.txt"
s3_key = "example.txt"
local_download_path = "downloaded_example.txt"

# Создание клиента S3
s3 = boto3.client("s3", endpoint_url=endpoint_url)

# 1. Загрузка файла в бакет
if os.path.exists(local_upload_path):
    print(f"Загрузка файла {local_upload_path} в бакет...")
    s3.upload_file(local_upload_path, bucket_name, s3_key)
    print("Загрузка завершена.")
else:
    print(f"Файл {local_upload_path} не найден. Пропуск загрузки.")

# 2. Получение списка объектов в бакете
print("\nСодержимое бакета:")
paginator = s3.get_paginator("list_objects_v2")
for page in paginator.paginate(Bucket=bucket_name):
    for obj in page.get("Contents", []):
        print(f"- {obj['Key']}")

# 3. Скачивание файла из бакета
print(f"\nСкачивание {s3_key} в {local_download_path}...")
s3.download_file(bucket_name, s3_key, local_download_path)
print("Скачивание завершено.")

# 4. Удаление файла из бакета
print(f"\nУдаление {s3_key} из бакета...")
s3.delete_object(Bucket=bucket_name, Key=s3_key)
print("Удаление завершено.")
```

Дополнительные примеры использования SDK вы можете найти в [нашем репозитории GitHub](https://github.com/timeweb-cloud/s3-examples/tree/master/python3).
