Python初始化

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何初始化Python SDK。

注意事项

  • 初始化Python SDK前,您需要配置访问凭证,本文以从环境变量读取访问凭证为例,详情请参见配置访问凭证

  • 如果您希望获取关于OSS支持的RegionEndpoint的对应关系,请参见OSS地域和访问域名

  • 如果您希望创建RAM用户的AccessKey,请参见创建AccessKey

  • 使用Python SDK时,大部分操作都是通过oss2.Serviceoss2.Bucket两个类进行。

    • oss2.Service类用于列举存储空间。

    • oss2.Bucket类用于上传、下载、删除文件以及对存储空间进行各种配置。

    初始化oss2.Serviceoss2.Bucket两个类时,需要指定Endpoint。其中oss2.Service类不支持自定义域名访问。

前置条件

警告

在配置客户端前,您需要先使用RAM用户AccessKey完成配置环境变量。

Linux

  1. 在命令行界面执行以下命令来将环境变量设置追加到~/.bashrc 文件中。

    echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
    echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
  2. 执行以下命令使变更生效。

    source ~/.bashrc
  3. 执行以下命令检查环境变量是否生效。

    echo $OSS_ACCESS_KEY_ID
    echo $OSS_ACCESS_KEY_SECRET

macOS

  1. 在终端中执行以下命令,查看默认Shell类型。

    echo $SHELL
  2. 根据默认Shell类型进行操作。

    Zsh

    1. 执行以下命令来将环境变量设置追加到 ~/.zshrc 文件中。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
    2. 执行以下命令使变更生效。

      source ~/.zshrc
    3. 执行以下命令检查环境变量是否生效。

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

    Bash

    1. 执行以下命令来将环境变量设置追加到 ~/.bash_profile 文件中。

      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. 执行以下命令使变更生效。

      source ~/.bash_profile
    3. 执行以下命令检查环境变量是否生效。

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

Windows

CMD

  1. CMD中运行以下命令。

    setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
    setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
  2. 运行以下命令,检查环境变量是否生效。

    echo %OSS_ACCESS_KEY_ID%
    echo %OSS_ACCESS_KEY_SECRET%

PowerShell

  1. 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. 运行以下命令,检查环境变量是否生效。

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

默认示例

以下代码示例演示了如何使用V4签名和V1签名初始化Python SDK。

请注意,以下代码示例使用Bucket外网域名以及RAM用户的AK信息。

V4签名(推荐)

重要
  • 使用V4签名算法初始化时,您需要指定 Endpoint。本示例代码使用华东1(杭州)外网Endpoint:https://oss-cn-hangzhou.aliyuncs.com。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。如需使用其它Endpoint请参见OSS地域和访问域名

  • 使用V4签名算法初始化时,您需要指定阿里云通用Region ID作为发起请求地域的标识,本示例代码使用以华东1(杭州)Region ID:cn-hangzhou。如需查询其它Region ID请参见OSS地域和访问域名

以下是使用OSS域名初始化并使用V4签名的示例代码。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = 'yourEndpoint'
# 填写Endpoint对应的Region信息,例如cn-hangzhou。
region = 'cn-hangzhou'

# 填写Bucket名称。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region) 

V1签名(不推荐)

重要

阿里云对象存储OSS20250301日起不再对新用户(即新UID )开放使用V1签名,并将于20250901日起停止更新与维护且不再对新增Bucket开放使用V1签名。请尽快切换到V4签名,避免影响服务。更多信息,请参见公告说明

以下是使用OSS域名初始化并使用V1签名的示例代码。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = 'yourEndpoint'

# 填写Bucket名称。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket')                    

常见场景配置示例

以下提供了常见场景的配置示例,其中代码示例默认使用V4签名以及RAM用户的AK信息进行初始化。

内网域名配置示例

当您的应用部署在阿里云的ECS实例上,并且需要频繁访问同地域的OSS资源时,使用内网域名可以降低流量成本并提高访问速度。

以下是使用OSS内网域名配置OSSClient的示例代码。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou-internal.aliyuncs.com。
endpoint = 'yourEndpoint'
# 填写Endpoint对应的Region信息,例如cn-hangzhou。
region = 'cn-hangzhou'

# 填写Bucket名称。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region) 

自定义域名配置示例

当您有多个不同的OSS Bucket用于不同的目的时,可以通过为每个Bucket设置不同的子域名来更好地管理和组织资源。

以下是使用自定义域名配置OSSClient的示例代码。

警告

您需要先将自定义域名绑定至Bucket默认域名,否则将引发报错!关于绑定自定义域名的详细操作,请参见绑定自定义域名至Bucket默认域名

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# yourEndpoint请填写您的自定义域名。例如https://static.example.com。
endpoint = 'yourEndpoint'
# 填写Endpoint对应的Region信息,例如cn-hangzhou。
region = 'cn-hangzhou'

# 填写Bucket名称。请注意,设置is_cname=True表示开启CNAME选项
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', is_cname=True, region=region) 

连接超时配置示例

以下代码用于设置连接超时时间。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 强烈建议不要把访问凭证保存到工程代码里,否则可能导致访问凭证泄露,威胁您账号下所有资源的安全。本代码示例以从环境变量中获取访问凭证为例。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"

# 填写Bucket名称,并设置连接超时时间为30秒。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', connect_timeout=30,region=region)                    

关闭CRC数据校验示例

上传和下载文件时默认开启CRC数据校验,确保上传和下载过程的数据完整性。

警告

强烈建议不要关闭CRC数据校验功能。如果关闭此功能,则阿里云不保证上传和下载过程数据的完整性。

以下代码用于关闭CRC数据校验。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 强烈建议不要把访问凭证保存到工程代码里,否则可能导致访问凭证泄露,威胁您账号下所有资源的安全。本代码示例以从环境变量中获取访问凭证为例。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"

# 填写Bucket名称,并设置enable_crc=False来关闭CRC数据校验。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', enable_crc=False,region=region)                   

设置连接池大小

以下代码用于设置连接池大小。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 强烈建议不要把访问凭证保存到工程代码里,否则可能导致访问凭证泄露,威胁您账号下所有资源的安全。本代码示例以从环境变量中获取访问凭证为例。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"

# 设置连接池的大小,默认值为10。
session = oss2.Session(pool_size=20)

# 填写Bucket名称。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', session=session,region=region)

指定TLS版本

不同版本的TLS协议有不同的安全性和性能特点,请根据具体的应用场景选择合适版本的TLS协议。

说明

Python SDK 2.18.1及以上版本支持指定TLS版本。

以下代码用于指定TLS版本为1.2。

# -*- coding: utf-8 -*-
import ssl
import oss2
from requests.adapters import HTTPAdapter
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# 自定义ssl adapter。
class SSLAdapter(HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        # 设置TLS版本为1.2。
        kwargs["ssl_version"] = ssl.PROTOCOL_TLSv1_2
        return super().init_poolmanager(*args, **kwargs)

# 创建session对象,并通过session自定义adapter。
session = oss2.Session(adapter=SSLAdapter())

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"

# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', session=session, region=region)

# 上传文件。
bucket.put_object("example.txt", "hello")

oss2.Bucket类支持配置的参数汇总

初始化oss2.Bucket类时支持配置的参数请参见下表。

参数

示例值

描述

方法

is_cname

True

Endpoint是否为自定义域名。取值范围如下:

  • True:Endpoint为自定义域名。

  • False(默认):EndpointOSS域名。

oss2.Bucket(auth, cname, 'examplebucket', is_cname=True, region=region)

session

mytestsession

会话名,默认值为None,表示新开会话。如果设置此参数为已有会话名,则复用传入的会话。

oss2.Bucket(auth, endpoint, 'examplebucket', session=oss2.Session(), region=region)

connect_timeout

30

连接超时时间,默认值为60,单位为秒。

oss2.Bucket(auth, endpoint, 'examplebucket', connect_timeout=30, region=region)

app_name

mytool

应用名,默认值为空。如果此参数不为空,则在User Agent中加入对应值。

重要

由于该字符串会作为HTTP Header的值进行传输,因此该字符串必须遵循HTTP标准。

oss2.Bucket(auth, endpoint, 'examplebucket', app_name='mytool', region=region)

enable_crc

False

是否开启CRC数据校验。

  • True(默认):开启

  • False:关闭

oss2.Bucket(auth, endpoint, 'examplebucket', enable_crc=False, region=region)

常见问题

如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint以提升传输速度

当您的使用场景对上传速度有要求时,建议您通过与OSS同地域的其他阿里云产品(如ECS服务器)访问OSS,并且请改成使用内网 Endpoint进行访问,请参见 ECS实例通过OSS内网地址访问OSS资源

如何查看RAM用户的AK?是否可以查看旧的AccessKey Secret

  1. 如需查看RAM用户的AK,请直接登录RAM控制台选择具体用户查看AK信息。

  2. RAM用户的AccessKey Secret仅在创建时显示,之后无法查看,若已经遗忘了的话无法找回。您可以直接访问RAM控制台选择具体用户,并创建新的AccessKey进行轮换。具体操作请参见创建AccessKey

如果遇到报错问题该如何查询具体的错误类型?

关于错误类型的查询,OSS文档提供了EC错误码供您参阅,例如关于认证方面的常见报错问题,可参见02-AUTH