--- title: "Python" icon: "python" --- If you're working with Python, the official [infisical-python](https://github.com/Infisical/infisical-python) package is the easiest way to fetch and work with secrets for your application. ## Basic Usage ```py from flask import Flask from infisical import InfisicalClient app = Flask(__name__) client = InfisicalClient(token="your_infisical_token") @app.route("/") def hello_world(): # access value name = client.get_secret("NAME") return f"Hello! My name is: {name.secret_value}" ``` This example demonstrates how to use the Infisical Python SDK with a Flask application. The application retrieves a secret named "NAME" and responds to requests with a greeting that includes the secret value. We do not recommend hardcoding your [Infisical Token](/documentation/platform/token). Setting it as an environment variable would be best. ## Installation Run `pip` to add `infisical-python` to your project ```console $ pip install infisical ``` Note: You need Python 3.7+. ## Configuration Import the SDK and create a client instance with your [Infisical Token](/documentation/platform/token). ```py from infisical import InfisicalClient client = InfisicalClient(token="your_infisical_token") ``` ### Parameters An [Infisical Token](/documentation/platform/token) scoped to a project and environment Your self-hosted absolute site URL including the protocol (e.g. `https://app.infisical.com`) Time-to-live (in seconds) for refreshing cached secrets. Default: `300`. Whether or not debug mode is on ## Caching The SDK caches every secret and updates it periodically based on the provided `cache_ttl`. For example, if `cache_ttl` of `300` is provided, then a secret will be refetched 5 minutes after the first fetch; if the fetch fails, the cached secret is returned. For optimal performance, we recommend creating a single instance of the Infisical client and exporting it to be used across your entire app to take advantage of caching benefits. ## Working with Secrets ### client.get_all_secrets() ```py secrets = client.get_all_secrets() ``` Retrieve all secrets within the Infisical project and environment that client is connected to ### client.get_secret(secret_name, options) ```py secret = client.get_secret("API_KEY") value = secret.secret_value # get its value ``` By default, `get_secret()` fetches and returns a personal secret. If not found, it returns a shared secret, or tries to retrieve the value from `os.environ`. If a secret is fetched, `get_secret()` caches it to reduce excessive calls and re-fetches periodically based on the `cacheTTL` option (default is 300 seconds) when initializing the client — for more information, see the caching section. ### Parameters The key of the secret to retrieve The type of the secret. Valid options are "shared" or "personal" ### client.create_secret(secret_name, secret_value, options) ```py new_api_key = client.create_secret("API_KEY", "FOO"); ``` Create a new secret in Infisical. ### Parameters The key of the secret to create The value of the secret to create The type of the secret. Valid options are "shared" or "personal". A personal secret can only be created if a shared secret with the same name exists. ### client.update_secret(secret_name, secret_value, options) ```py updated_api_key = client.update_secret("API_KEY", "BAR"); ``` Update an existing secret in Infisical. ### Parameters The key of the secret to update The new value of the secret The type of the secret. Valid options are "shared" or "personal" ### client.delete_secret(secret_name, options) ```py deleted_secret = client.delete_secret("API_KEY"); ``` Delete a secret in Infisical. ### Parameters The key of the secret to delete The type of the secret. Valid options are "shared" or "personal" Follow this GitHub [issue](https://github.com/Infisical/infisical/issues/433) to stay updated.