debuggingvisual-studio-codevisual-studio-debuggingpythonpath

How to set environment variables in vscode for debugging?


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 ?


Solution

  • 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:

    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