Python Version Management
If you are using Agent v6, Datadog recommends that you upgrade to Agent v7. Agent v7 only includes support for Python 3.
However, there may be a case where you wish to continue using Agent v6 while updating to Python 3. Starting with Datadog Agent v6.14.0, Agent v6 integrates both Python 2 and Python 3 runtimes. This means that Agent Checks can be run either with Python 2 or Python 3, depending on the Agent configuration.
Use Python 3 with Datadog Agent v6
By default, the Agent v6 uses the Python 2 runtime. Below are instructions for how to configure Agent v6 to use the Python 3 runtime:
This configuration is not supported for the Azure VM Extension.
Host Agent
- Set the - python_versionconfiguration option in your- datadog.yamlconfiguration file:
 
- Restart the Agent. 
Alternatively, specify which Python runtime you want to use by setting the DD_PYTHON_VERSION environment variable to 2 or 3. Environment variables take precedence over configuration options in datadog.yaml. For example, by setting the DD_PYTHON_VERSION environment variable, the python_version option in datadog.yaml is ignored.
This is an Agent-wide configuration option. All Python checks launched by an Agent use the same Python runtime.
Container Agent
Datadog provides Agent container images for Python 2 and Python 3.
- Image tags starting with 6., like6.34.0or6.34.0-jmx, are images containing the Python 2 runtime.
- Image tags starting with 7., like7.34.0or7.34.0-jmx, are images containing the Python 3 runtime.
To switch from Python 2 to Python 3, update the image tag used to deploy the Agent.
By default, the Datadog Helm chart uses the Agent 7 image that embeds the Python 3 runtime.
To keep the Datadog Agent updated, edit your datadog-values.yaml to remove any information under the agent.image and the clusterChecksRunner.image sections.
To use a specific container registry, set it with agent.image.repository and clusterChecksRunner.image.repository. Ensure that agents.image.tag and clusterChecksRunner.image.tag are undefined.
The default registry is gcr.io/datadoghq/agent.
agent:
  image:
    repository: public.ecr.aws/datadog/agent
clusterChecksRunner:
  image:
    repository: public.ecr.aws/datadog/agent
To set the Agent to a specific version, set agents.image.tag and clusterChecksRunner.image.tag. All image tags starting with 7.* embed the Python 3 runtime.
agent:
  image:
    tag: 7.34.0
clusterChecksRunner:
  image:
    tag: 7.34.0
You can use both options at the same time.
agent:
  image:
    repository: public.ecr.aws/datadog/agent
    tag: 7.34.0
clusterChecksRunner:
  image:
    repository: public.ecr.aws/datadog/agent
    tag: 7.34.0
By default, the Datadog Operator uses an agent:7.*.* image that embeds the Python 3 runtime.
If the image information is not specified in the DatadogAgent resource, the Operator deploys a Python 3 Datadog Agent image.
If you have previously pinned the image version:
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  override:
    clusterChecksRunner:
      image:
        tag: 6.33.0
    nodeAgent:
      image:
        tag: 6.33.0
or you are using image.name:
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>
      appKey: <DATADOG_APP_KEY>
  override:
    # ...
    nodeAgent:
      image:
        name: gcr.io/datadoghq/agent:6.33.0
    # ...
    clusterChecksRunner:
      image:
        name: gcr.io/datadoghq/agent:6.33.0
Use the spec.global.registry if you need to change the default registry. The default is gcr.io/datadoghq/agent.
Then, pin the Agent 7 image tag in spec.override.nodeAgent.image.tag.
If you have enabled cluster check runners deployment, also pin the Agent 7 image tag in spec.override.clusterChecksRunner.image.tag.
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  # ...
  global:
    registry: public.ecr.aws/datadog
  override:
    # ...
    nodeAgent:
      image:
        tag: 7.33.0
    # ...
    clusterChecksRunner:
      image:
        tag: 7.33.0
Note: Datadog recommends that you do not set the *.image.tag. Instead, let the Datadog Operator keep the Agent image tag up-to-date with an Agent 7 image.
If you need to use an Agent JMX image, you can set it without specifying the Agent *.image.tag:
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  # ...
  global:
    registry: public.ecr.aws/datadog
  override:
    # ...
    nodeAgent:
      image:
        jmxEnabled: true
    clusterChecksRunner:
      image:
        jmxEnabled: true
In your DaemonSet manifest, update the image tag in each container definition:
- Each spec.template.spec.containers[*].imagevalue
- Each spec.template.spec.initContainers[*].imagevalue
For example, if your previous image value was gcr.io/datadoghq/agent:6.33.0, update it to gcr.io/datadoghq/agent:7.33.0.
Before:
apiVersion: apps/v1
spec:
  template:
    spec:
      containers:
      - name: agent
        image: gcr.io/datadoghq/agent:6.33.0
        # ...
After:
apiVersion: apps/v1
spec:
  template:
    spec:
      containers:
      - name: agent
        image: gcr.io/datadoghq/agent:7.33.0
        # ...
Use the extra_config field to set the python_version field to 3:
default_attributes(
   'datadog' => {
     'extra_config' => {
       'python_version' => '3'
     }
   }
 )
Use the agent_extra_config field to set the python_versionfield to 3:
class { "datadog_agent":
    agent_extra_options => {
        python_version => 3,
    },
}
Set the python_version to 3 inside of your datadog_config:
datadog_config:
  python_version: 3
Further Reading
Additional helpful documentation, links, and articles: