Propulsing the shelve module to the cloud
Project description
CShelve – The Python Dictionary That Lives in the Cloud 🚀
Store Python objects locally or in the cloud with the same, simple dictionary interface. CShelve lets you store and retrieve any Python object—lists, DataFrames, JSON, binary files—whether on local files, AWS S3, Azure Blob Storage, or in-memory, all with the same simple dictionary-like interface.
📌 Why CShelve?
- Familiar & Fast – If you know Python dictionaries, you already know CShelve.
- Cloud-Ready – Switch between local files and cloud storage (AWS S3, Azure Blob, SFTP) with zero code changes.
- Lightweight – No database servers, no migrations, no schema headaches and minimals dependencies.
- Flexible Formats – Store pickled Python objects by default, or any format as bytes (JSON, CSV, Parquet, images, etc.).
- Cost-Effective Scaling – Tap into cheap and durable cloud storage without maintaining infrastructure.
🔍 What’s “Shelve” Anyway?
Python’s built-in shelve module stores Python objects in a file with a dictionary-like API.
CShelve supercharges it with:
- Cloud backends
- Multiple authentication methods
- Format flexibility
- Provider-agnostic switching
If you can do:
mydict['key'] = value
You can use CShelve—locally, in the cloud, or on-premises.
📦 Installation
# Local storage only
pip install cshelve
# With AWS S3 support
pip install cshelve[aws-s3]
# With Azure Blob support
pip install cshelve[azure-blob]
⚡ Quick Start
Local Storage
import cshelve
db = cshelve.open('local.db')
db['user'] = {'name': 'Alice', 'age': 30}
print(db['user']) # {'name': 'Alice', 'age': 30}
db.close()
AWS S3
# Install provider
pip install cshelve[aws-s3]
aws-s3.ini
[default]
provider = aws-s3
bucket_name = mybucket
auth_type = access_key
key_id = $AWS_KEY_ID
key_secret = $AWS_KEY_SECRET
Python
import cshelve
db = cshelve.open('aws-s3.ini')
db['session'] = 'cloud storage is easy'
print(db['session'])
db.close()
Azure Blob
# Install provider
pip install cshelve[azure-blob]
azure-blob.ini
[default]
provider = azure-blob
account_url = https://myaccount.blob.core.windows.net
auth_type = passwordless
container_name = mycontainer
Python
import cshelve
db = cshelve.open('azure-blob.ini')
db['analytics'] = [1, 2, 3, 4]
print(db['analytics'])
db.close()
📊 Advanced Examples
Storing Pandas DataFrames in the Cloud
import cshelve, pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob'], 'age': [25, 30]})
with cshelve.open('azure-blob.ini') as db:
db['users'] = df
with cshelve.open('azure-blob.ini') as db:
print(db['users'])
Storing JSON (no pickle)
import json, cshelve
data = {"msg": "Hello, Cloud!"}
with cshelve.open('azure-blob.ini') as db:
db['config.json'] = json.dumps(data).encode()
with cshelve.open('azure-blob.ini') as db:
print(json.loads(db['config.json'].decode()))
🛠 Supported Providers
| Provider | Install Extra | Notes |
|---|---|---|
| Local | none | Stores data in a local .db file |
| AWS S3 | cshelve[aws-s3] |
Supports access_key auth |
| Azure Blob | cshelve[azure-blob] |
Supports access_key, passwordless, connection_string, anonymous auth |
| In-Memory | none | Perfect for tests and temporary storage |
Detailed configuration in the documentation.
🤝 Contributing
We welcome pull requests, feature suggestions, and bug reports. Check the issues to get started.
📄 License
MIT – see LICENSE
⭐ Pro Tip
Switching from local to cloud to on-premises is as easy as:
db = cshelve.open('local.db')
# to
db = cshelve.open('aws-s3.ini')
# to
db = cshelve.open('sftp.ini')
No code rewrite. Just change the config.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cshelve-1.6.0.tar.gz.
File metadata
- Download URL: cshelve-1.6.0.tar.gz
- Upload date:
- Size: 237.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0457962cc4bc8480fd0cbb9f209cd2deafcdf5fb3df11aa97ffefa1a3f0dd299
|
|
| MD5 |
23fe89cbbb92b5021c13c65dfe450c75
|
|
| BLAKE2b-256 |
eafa943cce3e22207cc9079805d7bcac4504c6396695467d997bb90749101237
|
File details
Details for the file cshelve-1.6.0-py3-none-any.whl.
File metadata
- Download URL: cshelve-1.6.0-py3-none-any.whl
- Upload date:
- Size: 28.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82528c2054921de4c3045b7e1e94cdfaa347e9562814e15962b642db10622e93
|
|
| MD5 |
972b3ffa47925ec697e43c83095c9df4
|
|
| BLAKE2b-256 |
3e374bab43cc0b50cfabf159945edc731997bc4291f74034e4f85c4e4a53f769
|