Simple and type-safe environment variables management for Python
Project description
easy-dotenv
Simple and type-safe environment variables management for Python.
Installation
pip install easy-dotenv
Usage
You can organize your environment variables by modules. For example:
# env_loader.py
from easy_dotenv import EnvConfig
class BaseEnv(EnvConfig):
# Base application settings
port: int
api_key: str
debug: bool = False # Optional with default value
workers: int = 4 # Optional with default value
class TelegramEnv(EnvConfig):
# Telegram-specific settings
bot_token: str
chat_id: str
channel_id: str = '' # Optional with default empty string
# Both classes will look for .env in project root
base = BaseEnv('..')
telegram = TelegramEnv('..')
__all__ = ['base', 'telegram']
Then use it in your code:
from env_loader import base, telegram
# Access base configuration
print(f"Port: {base.port}")
print(f"API Key: {base.api_key}")
print(f"Debug mode: {base.debug}") # False if not set
print(f"Workers: {base.workers}") # 4 if not set
# Access Telegram configuration
print(f"Bot Token: {telegram.bot_token}")
print(f"Chat ID: {telegram.chat_id}")
print(f"Channel ID: {telegram.channel_id}") # Empty string if not set
Your .env file:
# Base
PORT=8000
API_KEY=your_api_key_here
DEBUG=true
# Telegram
BOT_TOKEN=your_bot_token_here
CHAT_ID=your_chat_id_here
CHANNEL_ID=optional_channel_id
Features
- Type validation with automatic conversion
- Required and optional variables
- Default values
- .env file support with flexible path resolution
- Clean and simple API
- Full type hints support
- No code duplication
.env File Location
The path to the .env file can be specified in several ways:
'.env'- Look for.envin the same directory as the config file'..'- Look for.envin the project root (where pyproject.toml/setup.py is located)'config/.env'- Look in a subdirectory'../.env'- Look in the parent directoryNone- Use python-dotenv's default behavior
Type Conversion
The library automatically converts environment variables to the specified types:
class Env(EnvConfig):
# String values (no conversion needed)
api_key: str
database_url: str
# Integer values
port: int # "8000" -> 8000
workers: int = 4 # Default: 4
# Boolean values
debug: bool = False # Default: False
verbose: bool # "true"/"1" -> True, "false"/"0" -> False
Error Handling
The environment validation happens when you initialize the configuration:
from easy_dotenv import EnvConfig, EnvMissingError, EnvTypeError, EnvFileNotFoundError
try:
class Env(EnvConfig):
api_key: str # Required
port: int # Required
debug: bool = False # Optional
env = Env('..') # Look for .env in project root
except EnvMissingError as e:
print("Missing environment variables:", e)
except EnvTypeError as e:
print("Invalid environment variable type:", e)
except EnvFileNotFoundError as e:
print("Could not find .env file:", e) # Wrong path or no project root found
Development
Setup
# Create virtual environment
python3 -m venv venv
# Activate virtual environment
source venv/bin/activate # Linux/MacOS
# or
# venv\Scripts\activate # Windows
# Install with development dependencies
pip install -e ".[dev]"
Running Tests
# Run tests
pytest
# Run tests with coverage
pytest --cov=easy_dotenv
The test suite includes:
- Required variables validation
- Optional variables with defaults
- Type conversion (including boolean values)
- Error handling for missing variables
- Error handling for invalid types
- Mixed required and optional variables
License
MIT
Requirements
- Python 3.7 or higher
- python-dotenv>=0.19.0
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 easy_dotenv-0.3.2.tar.gz.
File metadata
- Download URL: easy_dotenv-0.3.2.tar.gz
- Upload date:
- Size: 7.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
725669493ee8e624ca3154ebc31c48436787a8a7812722aea334dbb4b2547b26
|
|
| MD5 |
ced78e6671dbcef467465d427a124a27
|
|
| BLAKE2b-256 |
4337d33b106959670fcc62f4a37d941eb0ede157c100624372c9321ca0d09fc0
|
File details
Details for the file easy_dotenv-0.3.2-py3-none-any.whl.
File metadata
- Download URL: easy_dotenv-0.3.2-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ce5e4bf7a07dc8cdc5ff87dd4d0743f974248816697020d63aa02a48d1b4cde
|
|
| MD5 |
b7a1e52b991f72c38a9af3474694fb7a
|
|
| BLAKE2b-256 |
e801693053c91f22ca107aaf962e4775473c52145ed6162f934c651f76f9e205
|