全部產品
Search
文件中心

Object Storage Service:Python初始化

更新時間:Feb 19, 2025

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

注意事項

  • 初始化Python SDK前,您需要配置訪問憑證,本文以從環境變數讀取存取憑證為例,詳情請參見配置訪問憑證

  • 如果您希望擷取關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱

  • 如果您希望建立RAM使用者的AccessKey,請參見建立AccessKey

  • 使用Python SDK時,大部分操作都是通過oss2.Service和oss2.Bucket兩個類進行。

    • oss2.Service類用於列舉儲存空間。

    • oss2.Bucket類用於上傳、下載、刪除檔案以及對儲存空間進行各種配置。

    初始化oss2.Service和oss2.Bucket兩個類時,需要指定Endpoint。其中oss2.Service類不支援自訂網域名訪問。

前置條件

重要

在配置用戶端前,您需要先使用RAM使用者AccessKey完成配置環境變數。

  1. 使用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
      1. 執行以下命令使變更生效。

        source ~/.bashrc
      2. 執行以下命令檢查環境變數是否生效。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. 在終端中執行以下命令,查看預設Shell類型。

      echo $SHELL
      1. 根據預設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"
      1. 運行以下命令,檢查環境變數是否生效。

        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)
      1. 運行以下命令,檢查環境變數是否生效。

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

  2. 參考上述方式修改系統內容變數後,請重啟或重新整理您的編譯運行環境,包括IDE、命令列介面、其他傳統型應用程式及後台服務,以確保最新的系統內容變數成功載入。

預設樣本

以下程式碼範例示範了如何使用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簽名(不推薦)

重要

阿里雲Object Storage Service自2025年03月01日起不再對新使用者(即新UID )開放使用V1簽名,並將於2025年09月01日起停止更新與維護且不再對新增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(預設):Endpoint為OSS網域名稱。

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,如何提升傳輸速度?

當您的使用情境對上傳速度有要求時,建議您通過與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