Python Environment Variables: Setting and Managing Variables in Your Code
Python environment variables: setting and managing variables in your code
Environment variables provide a powerful way to configure your python applications without modify code. Whether your store API keys, database credentials, or application settings, understand how to work with environment variables is an essential skill for python developers.
What are environment variables?
Environment variables are dynamic values that can affect the behavior of running processes on a computer. They exist outside your python code in the operating system environment and can be access by various applications, include your python scripts.
Use environment variables offer several advantages:
- Security: keep sensitive information like API keys and passwords out of your source code
- Flexibility: change application behavior without modify code
- Portability: configure applications otherwise across development, testing, and production environments
- Compatibility: follow the twelve factor app methodology for modern application development
Accessing environment variables in python
Before set environment variables, it’s helpful to understand how to access them. Python’s build in
Os
Module provides the primary interface for work with environment variables.
Use OS. Environ
The
Os. Environ
Object behaves like a dictionary, allow you to access environment variables by name:
Import OS - get the value of an environment variable API_key = OS.environ.get('API_key') - check if the variable exist and use a default value if it doesn't database_uURL= oOSenviron.get('database_uURL,' sqlite:///default.db' )- print all environment variables for key, value in osOSnviron.items ( ( print(f"{key }: { value } " "
The
Get ()
Method is specially useful because it returns
None
(or a specify default value )if the environment variable doesn’t exist, preferably than raise an exception.
Set environment variables in python
There be multiple ways to set environment variables for your python applications. Let’s explore each approach.
Method 1: set variables within python code
You can set environment variables now in your python code use
Os. Environ
Import OS - set an environment variable OS. Environ['databaseURLl' ] =' postgresql://user: password@localhost /MDBb' - verify it was set print(OS.environ.get('database_URL')
Important considerations for this approach:
- Variables set this way lonesome exist for the duration of the python process
- Child processes will inherit these variables, but parent or sibling processes won’t see them
- This method is useful for temporary configuration or testing
Method 2: use the python dot env package
For a more robust solution, specially during development, the
Python dot env
Package allow you to store environment variables in a
.env
File:
Firstly, install the package:
Pip install python dot env
Create a
.env
File in your project directory:
-.env file API_key = your_secret_key_here debug = true database_URL = postgresql://user: password@localhost / MDB
So, load these variables in your python code:
Import OS from dot env import loaddot envv - load environment variables from.env file loadot env( ( ) - directly you can access the variableAPIpi_key OSos.environ.getAPIpi_ke) ) debug =OSs.environ.get('debug))
Benefits of use
Python dot env
-
Keep sensitive information out of version control (add
.env
To
.gGit ignore
) - Simplifies development environment setup
-
Allow for different configurations across environments by use different
.env
Files
Method 3: set variables before run python
You can set environment variables before run your python script, which is frequently the preferred approach in production environments.
On Linux / macOS:
- set for a single command API_key = your_secret_key python your_script.py - or set for the current shell session export API_key = your_secret_key export database_URL = postgresql://user: password@localhost / MDB python your_script.py
On windows command prompt:
Set API_key = your_secret_key python your_script.py
On Windows PowerShell:
$ env: API_key =" your_secret_key " ython your_script.py
Method 4: use environment configuration in deployment tools
Modern deployment platforms provide build in ways to set environment variables:
-
Docker:
Use the
E
Flag or the
Environment
Section in docker compose.yml -
Heroku:
Use
Heroku config: set key = value
-
AWS lambda:
Configure environment variables in the lambda console -
GitHub actions:
Set secrets in repository settings
These platform specific approaches are typically the virtually secure for production environments.

Source: delftstack.com
Best practices for managing environment variables
Security considerations
Environment variables are not totally secure. Keep these security considerations in mind:

Source: printableformsfree.com
-
Environment variables can be viewed by anyone with access to the proces(( e.g., use
PS e
On Linux) - They may be logged in error reports or debug output
- For extremely sensitive information, consider more secure solutions like AWS secrets manager or HashiCorp vault
-
Ne’er commit
.env
Files or hardcode secrets to version control
Validation and default values
Invariably validate environment variables and provide sensible defaults when possible:
Import OS - validate require environment variables def get_required_env_var(name): value = oOSenviron.get(name )if value is none: raise vavalue error"require environment variable' { name }' is not set " return value - use with validation try: apAPIey = get_required_env_var('apAPIey' ))xcept valvalue error e: print(f"error: { e } "" exit(1 ) )provide defaults for optional variables debug_mode = os.environ.get('debug',' false').lower ( ) ( true' port = int(oINTnOSron.get('port', 8000 ))
Type conversion
Remember that environment variables are e’er strings. Convert them to the appropriate data type:
Import OS - convert string to boolean debug = os.environ.get('debug',' false').lower () in (' true',' yes',' 1',' t' )- convert string to integer port = inINTsOSnviron.get('port',' 8000' )) convert string to float timeout = float(os.OSviron.get('timeout',' 30.0' ) )convert comma separate string to list allowed_hosts = os.environ.get('allowed_hosts',' localhost').split (',' ))
Environment specific configuration
Use environment variables to manage different configurations across environments:
Import OS - determine the current environment = OS.environ.get('environment',' development') - configure base on environment if environment =' production': debug = false database_uURL= oOSenviron.get('database_uURL )log_level =' error' elelfnvironment =' staging': debug = true database_urlURLos.OSviron.get('staging_database_urlURL )g_level =' warning' else: - development debug = true database_url URLs.eOSiron.get('dev_database_url'URLsqlite:///dev.db' ) l)_level =' debug'
Advanced environment variable management
Use environment variables with configuration classes
For larger applications, consider use a configuration class to centralize environment variable management:
Import oxygen from dot env import loaddot envv class config: def unitit__(se) ): loaddot env(( ) - application settings self.debug = os.environ.get('debug',' false').lower( ) =' true' self.environment = OS.environ.get('environment',' development') self.secret_key = oOSenviron.get('secret_key',' dev key not secure' )- database settings self.db_urURL osOSnviron.get('database_urURL' sqlite:///app.db' ))elf.db_pool_size = intINT.OSviron.get('db_dBol_size',' 5' ) )api APItings self.api_API = os.eOSiron.get('api_API' ) s)f.api_tAPIout = float(os.enOSron.get('api_tAPIout',' 30.0' ) - )lidate require settings if self.environment =' production': self._validate_production_config ( ) de(_ validate_production_config(self ): if )t self.secret_key or self.secret_key =' dev key not secure': raise valueerrvalue errortion environment require a secure secret_key " ) if" t self.api_key:APIise valueerrvalue errortion environment require api_keyAPI be set " ) - " ge config = config ( ) prin(f"runne in runnerfig.environm Environment" ) pr" (f"debug mode: { config.debug } Debug"
Use environment variables with Django
Django’s
Settings.py
File is a common place to use environment variables:
Import OS from dot env import loaddot envv - load environment variables from.env file loadot env( ( ) - security warning: keep the secret key use in production secret! Secret_key OSos.environ.get('secret_key',Djangogo insecure default ke) ) - security warning: don't run with debug turn on in production! Debug = os.environ.get('debug',' false').lower( ) =' true' allowed_hosts = OS.environ.get('allowed_hosts',' localhost,127.0.0.1').split (',') - database configuration databases = {' default': {' engine': oOSenviron.get('ddBengine',' django.db.backends.sqlite3' )' name': osOSnviron.get('dbdBame',' dbdBqlite3' )) user': os.OSviron.get('db_dBer','' ),)password': os.eOSiron.get('db_pdBsword','' ),')ost': os.enOSron.get('db_hodB','' ),' )rt': os.envOSon.get('db_pordB,'' ), })
Use environment variables with flask
Flask mechanically load environment variables from a
.fFlask env
File if you’re use the flask CLI:
Import oxygen from flask import flask from dot env import loaddot env(( ) - load variables from.env file app = flask(__name )) app.config['secret_key' ] = OS.environ.get('secret_key',' dev key') app.config['debug' ] = os.environ.get('flask_debug',' false').lower (( =' true' app.config['database_urURI] = osOSnviron.get('database_urURI' sqlite:///app.db' ))app.route('/' ) )f home ( ):(eturn f"runnerunner os.eOSiron.get('flask_env',' development' ) })ode " if" name _ =' _ main _': app.run(host='0.0.0.0', port = int(osINTvOSon.get('port', 5000 ))
Troubleshoot environment variables
Common issues and solutions
Hither are some common problems with environment variables and how to solve them:
Variables not being recognized
- Check for typos in variable names
- Verify the variable is set in the current environment (not good in a different terminal or process )
-
Ensure
.env
Files are in the correct location relative to your script -
Check that
Load_dot env( )
Is call before attempt to access variables
Case sensitivity
- Environment variable names are typically case-sensitive
- Ensure consistent casing between where you set and access the variable
Whitespace issues
-
Be cautious of lead or trail whitespace in
.env
Files -
Avoid spaces around the equals sign in
.env
Files (use
Key = value
, not
Key = value
)
Debug environment variables
When troubleshooted, it can be helpful to print all environment variables:
Import OS - print all environment variables for key, value in sorted(OS.environ.items () ) print(f"{key}={value } ""
Conclusion
Set and manage environment variables in python is a fundamental skill that enhance application security, flexibility, and maintainability. By follow the approaches and best practices outline in this guide, you can efficaciously use environment variables to configure your python applications across different environments.
Remember these key points:
-
Use
Os. Environ
To access and set environment variables in python code -
Consider
Python dot env
For development environments to manage variables in
.env
Files - Set environment variables at the system or deployment platform level for production environments
- Invariably validate inputs and provide sensible defaults where appropriate
- Keep sensitive information out of your code and version control
- Convert environment variable strings to appropriate data types before use them
With these techniques, you can build more secure, configurable, and portable python applications that follow modern development best practices.
MORE FROM ittutoria.net











