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
Create an environment configuration file (e.g., env_loader.py):
from easy_dotenv import EnvConfig
class Env(EnvConfig):
# Required variables (will raise EnvMissingError if not set)
port: int
api_key: str
# Optional variables with default values
debug: bool = False
workers: int = 4
env = Env('..') # Look for .env file in project root (see .env File Location below)
__all__ = ['env']
Then use it in your code:
from env_loader import env
print(f"Port: {env.port}") # Required, must be set in environment or .env
print(f"API Key: {env.api_key}") # Required, must be set in environment or .env
print(f"Debug mode: {env.debug}") # Optional, False if not set
print(f"Workers: {env.workers}") # Optional, 4 if not set
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.0.tar.gz.
File metadata
- Download URL: easy_dotenv-0.3.0.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8534571b290caaa334f2a211071668b49dcc8bb5b34b1b3391649b1cb18a0e87
|
|
| MD5 |
3276af403f774e6bc79e9e8216cc6e9e
|
|
| BLAKE2b-256 |
0eb2333b14b392c95b64305e9716893ad05cfd4fc45b9fe826575ca89885c48c
|
File details
Details for the file easy_dotenv-0.3.0-py3-none-any.whl.
File metadata
- Download URL: easy_dotenv-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.7 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 |
2c726049a991261b882e609ce86eeda7650270ae1397ede7661e91414ed5839d
|
|
| MD5 |
9c5dcfd136726fc05a52963928262312
|
|
| BLAKE2b-256 |
3184c173836f2f1518eeba61e839db82b6b4e0475441d45f4ef9278373c53085
|