obstore
v0.2.0
與 Amazon S3、Google Cloud Storage、Azure Blob Storage 等物件儲存服務以及 Cloudflare R2 等符合 S3 的 API 進行簡單、快速的整合。
list
,無需分頁。dict
/ list
物件更快。get_range
和get_ranges
中從 Rust 到 Python 的零拷貝資料交換。boto3.Session
物件建立的幫助程序使用 pip 安裝 obstore:
pip install obstore
Obstore 位於 conda-forge 上,可以使用 conda、mamba 或 pixi 安裝。使用 conda 安裝 obstore:
conda install -c conda-forge obstore
網站上提供了完整的文檔。
建構商店的類別從obstore.store
子模組匯出:
S3Store
:設定與 Amazon S3 的連線。GCSStore
:設定與 Google Cloud Storage 的連線。AzureStore
:設定與 Microsoft Azure Blob 儲存體的連線。HTTPStore
:設定與通用 HTTP 伺服器的連接LocalStore
:提供相同物件儲存介面的本機檔案系統儲存。MemoryStore
:ObjectStore 的完全記憶體實作。 import boto3
from obstore . store import S3Store
session = boto3 . Session ()
store = S3Store . from_session ( session , "bucket-name" , config = { "AWS_REGION" : "us-east-1" })
上面的每個儲存類別都有自己的配置,可以透過config
命名參數存取。文件中對此進行了介紹,字串文字位於類型提示中。
其他 HTTP 用戶端設定可透過client_options
命名參數取得。
所有與商店互動的方法都導出為頂級函數(而不是store
物件上的方法):
copy
:將物件從一個路徑複製到同一物件儲存中的另一個路徑。delete
:刪除指定位置的物件。get
:傳回儲存在指定位置的位元組。head
:傳回指定位置的元數據list
:列出具有給定前綴的所有物件。put
:將提供的位元組儲存到指定位置rename
:將同一物件儲存中的物件從一個路徑移動到另一個路徑。還有一些對於特定用例有用的附加 API:
get_range
:從檔案中取得特定的位元組範圍。get_ranges
:從單一檔案中取得多個位元組範圍。list_with_delimiter
:列出特定目錄中的物件。sign
:建立簽名 URL。所有方法都有一個類似的非同步方法,具有相同的名稱加上_async
後綴。
import obstore as obs
store = obs . store . MemoryStore ()
obs . put ( store , "file.txt" , b"hello world!" )
response = obs . get ( store , "file.txt" )
response . meta
# {'path': 'file.txt',
# 'last_modified': datetime.datetime(2024, 10, 21, 16, 19, 45, 102620, tzinfo=datetime.timezone.utc),
# 'size': 12,
# 'e_tag': '0',
# 'version': None}
assert response . bytes () == b"hello world!"
byte_range = obs . get_range ( store , "file.txt" , offset = 0 , length = 5 )
assert byte_range == b"hello"
obs . copy ( store , "file.txt" , "other.txt" )
assert obs . get ( store , "other.txt" ). bytes () == b"hello world!"
所有這些方法也都有async
對應方法,後綴為_async
。
import obstore as obs
store = obs . store . MemoryStore ()
await obs . put_async ( store , "file.txt" , b"hello world!" )
response = await obs . get_async ( store , "file.txt" )
response . meta
# {'path': 'file.txt',
# 'last_modified': datetime.datetime(2024, 10, 21, 16, 20, 36, 477418, tzinfo=datetime.timezone.utc),
# 'size': 12,
# 'e_tag': '0',
# 'version': None}
assert await response . bytes_async () == b"hello world!"
byte_range = await obs . get_range_async ( store , "file.txt" , offset = 0 , length = 5 )
assert byte_range == b"hello"
await obs . copy_async ( store , "file.txt" , "other.txt" )
resp = await obs . get_async ( store , "other.txt" )
assert await resp . bytes_async () == b"hello world!"
閱讀與object-store-python
詳細比較,這是一個先前的 Python 函式庫,也包裝了相同的 Rust object_store
crate。