All Products
Search
Document Center

Object Storage Service:Get started with OSS SDK for Python

Last Updated:Dec 17, 2024

This topic describes how to use Object Storage Service (OSS) SDK for Python to perform common operations, such as creating buckets, uploading objects, and downloading objects.

Prerequisites

Configure the AccessKey pair

Use the AccessKey pair of the RAM user to configure environment variables.

Linux

  1. Run the following command on the CLI to add the configurations of the environment variables to the ~/.bashrc file:

    echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
    echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
  2. Run the following command to allow the changes to take effect:

    source ~/.bashrc
  3. Run the following command to check whether the configurations of the environment variables take effect:

    echo $OSS_ACCESS_KEY_ID
    echo $OSS_ACCESS_KEY_SECRET

macOS

  1. Run the following command in the terminal to view the default Shell type:

    echo $SHELL
  2. Perform operations based on the default Shell type.

    Zsh

    1. Run the following command to add the configurations of the environment variables to the ~/.zshrc file:

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
    2. Run the following command to allow the changes to take effect:

      source ~/.zshrc
    3. Run the following command to check whether the configurations of the environment variables take effect:

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

    Bash

    1. Run the following command to add the configurations of the environment variables to the ~/.bash_profile file:

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
    2. Run the following command to allow the changes to take effect:

      source ~/.bash_profile
    3. Run the following command to check whether the configurations of the environment variables take effect:

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

Windows

CMD

  1. Run the following command in CMD:

    setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
    setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
  2. Run the following command to check whether the environment variable takes effect:

    echo %OSS_ACCESS_KEY_ID%
    echo %OSS_ACCESS_KEY_SECRET%

PowerShell

  1. Run the following command in PowerShell:

    [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
    [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. Run the following command to check whether the environment variable takes effect:

    [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
    [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

Install OSS SDK for Python

  1. Run the following command to view the version of the Python runtime environment if the Python runtime environment is installed:

    OSS SDK for Python requires Python 2.6, 2.7, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, or later.

    python -version

    If the Python runtime environment is not installed, download and install the Python runtime environment.

  2. Install OSS SDK for Python.

    Run the following command to install OSS SDK for Python:

    pip install oss2

Examples

Run the following sample code to create and delete a bucket, and upload, download, list, and delete objects to learn how to use OSS SDK for Python to perform common operations:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from itertools import islice
import os
import logging
import time
import random

# Configure logs.
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# Check whether the environment variables are configured.
required_env_vars = ['OSS_ACCESS_KEY_ID', 'OSS_ACCESS_KEY_SECRET']
for var in required_env_vars:
    if var not in os.environ:
        logging.error(f"Environment variable {var} is not set.")
        exit(1)

# Obtain access credentials from environment variables.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the endpoint and region.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"

def generate_unique_bucket_name():
    # Query the current timestamp.
    timestamp = int(time.time())
    # Generate a random number from 0 to 9999.
    random_number = random.randint(0, 9999)
    # Specify the name of the bucket. The name must be globally unique.
    bucket_name = f"demo-{timestamp}-{random_number}"
    return bucket_name

# Generate a unique bucket name.
bucket_name = generate_unique_bucket_name()
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)

def create_bucket(bucket):
    try:
        bucket.create_bucket(oss2.models.BUCKET_ACL_PRIVATE)
        logging.info("Bucket created successfully")
    except oss2.exceptions.OssError as e:
        logging.error(f"Failed to create bucket: {e}")

def upload_file(bucket, object_name, data):
    try:
        result = bucket.put_object(object_name, data)
        logging.info(f"File uploaded successfully, status code: {result.status}")
    except oss2.exceptions.OssError as e:
        logging.error(f"Failed to upload file: {e}")

def download_file(bucket, object_name):
    try:
        file_obj = bucket.get_object(object_name)
        content = file_obj.read().decode('utf-8')
        logging.info("File content:")
        logging.info(content)
        return content
    except oss2.exceptions.OssError as e:
        logging.error(f"Failed to download file: {e}")

def list_objects(bucket):
    try:
        objects = list(islice(oss2.ObjectIterator(bucket), 10))
        for obj in objects:
            logging.info(obj.key)
    except oss2.exceptions.OssError as e:
        logging.error(f"Failed to list objects: {e}")

def delete_objects(bucket):
    try:
        objects = list(islice(oss2.ObjectIterator(bucket), 100))
        if objects:
            for obj in objects:
                bucket.delete_object(obj.key)
                logging.info(f"Deleted object: {obj.key}")
        else:
            logging.info("No objects to delete")
    except oss2.exceptions.OssError as e:
        logging.error(f"Failed to delete objects: {e}")

def delete_bucket(bucket):
    try:
        bucket.delete_bucket()
        logging.info("Bucket deleted successfully")
    except oss2.exceptions.OssError as e:
        logging.error(f"Failed to delete bucket: {e}")

# The following sample code provides an example of the main process of using OSS SDK for Python to perform common operations.
if __name__ == '__main__':
    # 1: Create a bucket.
    create_bucket(bucket)
    # 2. Upload a local file to the bucket.
    upload_file(bucket, 'test-string-file', b'Hello OSS, this is a test string.')
    # 3. Download an object from the bucket.
    download_file(bucket, 'test-string-file')
    # 4. List objects in the bucket.
    list_objects(bucket)
    # 5. Delete an object from the bucket.
    delete_objects(bucket)
    # 6. Delete a bucket.
    delete_bucket(bucket)