How to set environment variables in vscode for debugging?
Asked Answered
S

2

8

I have a fairly large python/c++ program that runs as follow:

  1. . set_env.sh -option A -option B
  2. python run.py

The set_env.sh script modifies the PYTHONPATH and does all sort of export in order to point to the right c++ program. When running these two commands in the terminal, that works just well, however, using the debugger breaks it all.

I try running ". set_env.sh -option A -option B" in preLaunchTask but it seems the debugger can't see the new PYTHONPATH.

How can I make the debugger run the the set_env and consider the new PYTHONPATH ?

Span answered 7/3, 2022 at 13:5 Comment(0)
F
7

Inspired by my current area of work - which involved Python.

This is what I do for Flask.

enter image description here

MS Link

https://code.visualstudio.com/docs/python/debugging

For any regular Python debugging

enter image description here

Evidence

import os

for key in os.environ.keys():
    print(f"{key}={os.environ.get(key)}")

After doing a F5 in VS Code with a file containing the above snippet: enter image description here

Update on Feb 18

After receiving a comment I think the OP wants to run a script before debugging the Fask application. The steps that worked for me are below.

Overview

I ended up with the following files:

  • Add a PowerShell file dosomething.ps1 (my custom script which I intend to launch before every debug session)
  • Add a task.json (launch dosomething.ps1)
  • Edit the existing launch.json by linking it with the task in task.json enter image description here

The file dosomething.ps1

Write-Host "Inside do something"
Write-Host "The value of the environment variable TEMP is $env:TEMPcls"
Write-Host "The current path of the script is $PSScriptroot"

The file tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "my script task",
            "type": "shell",
            "windows": {
                "command": "pwsh -f dosomething.ps1"
            },
            "problemMatcher": []
        }
    ]
}

Linking the launch.json with task.json

enter image description here

After pressing F5

enter image description here


What if my environment variable is a secret that I do not want to add to launch.json ?

In my team, we place all confidential variables in a .env file and add the file to .gitignore. As per design of VS Code, it will look for a .env file in the root of the current workspace and load those variables before launching your Python script. Please refer documentaion from MS here: https://code.visualstudio.com/docs/python/environments

By default, the Python extension looks for and loads a file named .env in the current workspace folder, then applies those definitions. The file is identified by the default entry "python.envFile": "${workspaceFolder}/.env" in your user settings (see General Python settings). You can change the python.envFile setting at any time to use a different definitions file

Fairish answered 24/1, 2023 at 7:47 Comment(5)
This is the same answer as @fitzberg but it does not work since the script set_env.sh has to be launched before each debugging session :/Paradisiacal
@Paradisiacal Please see my updates to the original answer (section marked with Feb 18). I am launching a PowerShell script before launching the Fask debuggerFairish
I can't verify if this works on Windows but on Mac the script will run but then the debugger command will fail to run and sit waiting to attach.Sweater
But if I don't want to share my API keys in lauch.json which is not git-ignored, what's the best way to do so?Blau
@Blau Good question. In my team, we place all confidential variables in a .env file and add the file to .gitignore. As per design of VS Code, it will look for a .env file in the root of the current workspace and load those variables before launching your Python script. Please refer documentaion from MS here: code.visualstudio.com/docs/python/environmentsFairish
M
5

I had a similar problem and could solve it by setting environment variables in the "env" field of the launch.JSON file. This shoudl be stored in a .vscode folder in your project root, here is the docs: https://code.visualstudio.com/docs/python/debugging

I discovered the "env" field in this snippet here: https://gist.github.com/slaveofcode/b4c18efc99c16029913cde3fd2dba3ce

Not sure how to configure this dynamically with the -option A -option B however. Hope this helps :)

Manvel answered 19/9, 2022 at 10:37 Comment(1)
We are close to the solution but it does not work since the script set_env.sh has to be launched before each debugging session :/Paradisiacal

© 2022 - 2025 — McMap. All rights reserved.