Debugging specific app types
The configuration dropdown provides various different options for general app types:
Configuration | Description |
Attach | See Remote debugging in the previous section. |
Django | Specifies |
Flask | See Flask debugging below. |
Gevent | Adds |
Pyramid | Removes |
Specific steps are also needed for remote debugging and Google App Engine. For details on debugging tests, see Testing.
To debug an app that requires administrator privileges, use
"console": "externalTerminal"
and
"sudo": "True"
.
Flask debugging
{ "name": "Python Debugger: Flask", "type": "debugpy", "request": "launch", "module": "flask", "env": { "FLASK_APP": "app.py" }, "args": [ "run", "--no-debugger" ], "jinja": true },
As you can see, this configuration specifies
"env": {"FLASK_APP": "app.py"}
and
"args": ["run", "--no-debugger"]
. The
"module": "flask"
property is used instead of
program
. (You may see
"FLASK_APP": "${workspaceFolder}/app.py"
in the
env
property, in which case modify the configuration to refer to only the filename. Otherwise, you may see “Cannot import module C” errors where C is a drive letter.)
The
"jinja": true
setting also enables debugging for Flask’s default Jinja templating engine.
If you want to run Flask’s development server in development mode, use the following configuration:
{ "name": "Python Debugger: Flask (development mode)", "type": "debugpy", "request": "launch", "module": "flask", "env": { "FLASK_APP": "app.py", "FLASK_ENV": "development" }, "args": [ "run" ], "jinja": true },
Git Integration
VSCode comes with built-in Git integration. No more writing Git commands on terminals. Git integration provides a user-friendly GUI and helpful functions for diff, views, staging, branching, committing, merge, and more.
Check out our Git Cheat Sheet to learn about the various Git commands and functionalities.
Note: To enable Git integration, you need to install Git from official site.
Initializing Git
We can access it through the action bar or by using the keyboard shortcut: Ctrl + Shift + G. Before we start committing, we need to initialize the repository.
Git Commit
After that, add and commit the changes with the message. It is that simple.
Create a GitHub repository and push the code
You can even create a GitHub repository and push your code to a remote server by logging into your GitHub account.
Private GitHub repository
We have created a GitHub private repository of Python files and folders.
You can now simply commit and push the changes to the remote server without leaving the VSCode.
Follow our Github and Git tutorial to learn everything about Git and GitHub.
Next steps
To learn how to build web apps with popular Python web frameworks, see the following tutorials:
There is then much more to explore with Python in Visual Studio Code:
- Python profile template – Create a new profile with a curated set of extensions, settings, and snippets
- Editing code – Learn about autocomplete, IntelliSense, formatting, and refactoring for Python.
- Linting – Enable, configure, and apply a variety of Python linters.
- Debugging – Learn to debug Python both locally and remotely.
- Testing – Configure test environments and discover, run, and debug tests.
- Settings reference – Explore the full range of Python-related settings in VS Code.
- Deploy Python to Azure App Service
- Deploy Python to Container Apps
Quick Start Guide for Python in VS Code
The Python extension makes Visual Studio Code an excellent Python editor, works on any operating system, and is usable with a variety of Python interpreters.
Get started by installing:
- VS Code
- A Python Interpreter (any actively supported Python version)
- Python extension from the VS Code Marketplace
To further customize VS Code for Python, you can leverage the Python profile template, automatically installing recommended extensions and settings. For Data Science projects, consider using the Data Science profile template.
Why use VSCode for Python?
Virtual Studio Code (VSCode) is a perfect Integrated Development Environment for Python. It is simple and comes with built-in features that enhance the development experience. VSCode Python extensions come with powerful features like syntax autocomplete, linting, debugging, unit testing, GitOps, virtual environments, notebooks, editing tools, and the ability to customize the editor.
Key Features:
- Command Palette to access all commands by typing keywords.
- Fully customizable keyboard shortcuts.
- Jupyter extension for data science. Run Jupyter notebook within the IDE.
- Auto linting and formatting.
- Debugging and Testing.
- Git integration.
- Custom code snippets.
- Enhanced editing tools. Multi cursor selection, column selection, outline view, side-by-side preview, and search and modify.
In this tutorial, we will start by installing Python and VSCode, then run a Python script in VSCode. After that, we will customize the editor to enhance the Python development experience by installing essential extensions and learning about built-in features. In the end, we will learn about Python productivity hacks.
Debugging
No more
For more specific information on debugging in Python, such as configuring your
launch.json
settings and implementing remote debugging, see Debugging. General VS Code debugging information is found in the debugging document.
Additionally, the Django and Flask tutorials provide examples of how to implement debugging in the context of web applications, including debugging Django templates.
Next steps
- Editing code – Learn about autocomplete, IntelliSense, formatting, and refactoring for Python.
- Debugging – Learn to debug Python both locally and remotely.
- Testing – Configure test environments and discover, run, and debug tests.
- Settings reference – Explore the full range of Python-related settings in VS Code.
Debugging by attaching over a network connection
Local script debugging
There may be instances where you need to debug a Python script that’s invoked locally by another process. For example, you may be debugging a web server that runs different Python scripts for specific processing jobs. In such cases, you need to attach the VS Code debugger to the script once it’s been launched:
-
Run VS Code, open the folder or workspace containing the script, and create a
launch.json
for that workspace if one doesn’t exist already. -
In the script code, add the following and save the file:
import debugpy # 5678 is the default attach port in the VS Code debug configurations. Unless a host and port are specified, host defaults to 127.0.0.1 debugpy.listen(5678) print("Waiting for debugger attach") debugpy.wait_for_client() debugpy.breakpoint() print('break on this line')
-
Open a terminal using Terminal: Create New Terminal, which activates the script’s selected environment.
-
In the terminal, install the debugpy package.
-
In the terminal, start Python with the script, for example,
python3 myscript.py
. You should see the “Waiting for debugger attach” message that’s included in the code, and the script halts at the
debugpy.wait_for_client()
call. -
Switch to the Run and Debug view (⇧⌘D (Windows, Linux Ctrl+Shift+D)), select the appropriate configuration from the debugger dropdown list, and start the debugger.
-
The debugger should stop on the
debugpy.breakpoint()
call, from which point you can use the debugger normally. You also have the option of setting other breakpoints in the script code using the UI instead of using
debugpy.breakpoint()
.
Remote script debugging with SSH
Remote debugging allows you to step through a program locally within VS Code while it runs on a remote computer. It is not necessary to install VS Code on the remote computer. For added security, you may want or need to use a secure connection, such as SSH, to the remote computer when debugging.
Note: On Windows computers, you may need to install Windows 10 OpenSSH to have the
ssh
command.
The following steps outline the general process to set up an SSH tunnel. An SSH tunnel allows you to work on your local machine as if you were working directly on the remote in a more secure manner than if a port was opened for public access.
On the remote computer:
-
Enable port forwarding by opening the
sshd_config
config file (found under
/etc/ssh/
on Linux and under
%programfiles(x86)%/openssh/etc
on Windows) and adding or modifying the following setting:
AllowTcpForwarding yes
Note: The default for AllowTcpForwarding is yes, so you might not need to make a change.
-
If you had to add or modify
AllowTcpForwarding
, restart the SSH server. On Linux/macOS, run
sudo service ssh restart
; on Windows, run
services.msc
, select OpenSSH or
sshd
in the list of services, and select Restart.
On the local computer:
-
Create an SSH tunnel by running
ssh -2 -L sourceport:localhost:destinationport -i identityfile user@remoteaddress
, using a selected port for
destinationport
and the appropriate username and the remote computer’s IP address in
user@remoteaddress
. For example, to use port 5678 on IP address 1.2.3.4, the command would be
ssh -2 -L 5678:localhost:5678 -i identityfile [email protected]
. You can specify the path to an identity file, using the
-i
flag. -
Verify that you can see a prompt in the SSH session.
-
In your VS Code workspace, create a configuration for remote debugging in your
launch.json
file, setting the port to match the port used in the
ssh
command and the host to
localhost
. You use
localhost
here because you’ve set up the SSH tunnel.
{ "name": "Python Debugger: Attach", "type": "debugpy", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", // Maps C:\Users\user1\project1 "remoteRoot": "." // To current working directory ~/project1 } ] }
Starting debugging
Now that an SSH tunnel has been set up to the remote computer, you can begin your debugging.
-
Both computers: make sure that identical source code is available.
-
Both computers: install debugpy.
-
Remote computer: there are two ways to specify how to attach to the remote process.
-
In the source code, add the following lines, replacing
address
with the remote computer’s IP address and port number (IP address 1.2.3.4 is shown here for illustration only).
import debugpy # Allow other computers to attach to debugpy at this IP address and port. debugpy.listen(('1.2.3.4', 5678)) # Pause the program until a remote debugger is attached debugpy.wait_for_client()
The IP address used in
listen
should be the remote computer’s private IP address. You can then launch the program normally, causing it to pause until the debugger attaches. -
Launch the remote process through debugpy, for example:
python3 -m debugpy --listen 1.2.3.4:5678 --wait-for-client -m myproject
This starts the package
myproject
using
python3
, with the remote computer’s private IP address of
1.2.3.4
and listening on port
5678
(you can also start the remote Python process by specifying a file path instead of using
-m
, such as
./hello.py
).
-
-
Local computer: Only if you modified the source code on the remote computer as outlined above, then in the source code, add a commented-out copy of the same code added on the remote computer. Adding these lines makes sure that the source code on both computers matches line by line.
#import debugpy # Allow other computers to attach to debugpy at this IP address and port. #debugpy.listen(('1.2.3.4', 5678)) # Pause the program until a remote debugger is attached #debugpy.wait_for_client()
-
Local computer: switch to the Run and Debug view (⇧⌘D (Windows, Linux Ctrl+Shift+D)) in VS Code, select the Python Debugger: Attach configuration
-
Local computer: set a breakpoint in the code where you want to start debugging.
-
Local computer: start the VS Code debugger using the modified Python Debugger: Attach configuration and the Start Debugging button. VS Code should stop on your locally set breakpoints, allowing you to step through the code, examine variables, and perform all other debugging actions. Expressions that you enter in the Debug Console are run on the remote computer as well.
Text output to stdout, as from
-
During remote debugging, the debugging toolbar appears as below:
On this toolbar, the disconnect button (⇧F5 (Windows, Linux Shift+F5)) stops the debugger and allows the remote program to run to completion. The restart button (⇧⌘F5 (Windows, Linux Ctrl+Shift+F5)) restarts the debugger on the local computer but does not restart the remote program. Use the restart button only when you’ve already restarted the remote program and need to reattach the debugger.
Next steps
To learn how to build web apps with popular Python web frameworks, see the following tutorials:
There is much more to explore with Python in Visual Studio Code:
- Python profile template – Create a new profile with a curated set of extensions, settings, and snippets
- Editing code – Learn about autocomplete, IntelliSense, formatting, and refactoring for Python.
- Linting – Enable, configure, and apply a variety of Python linters.
- Debugging – Learn to debug Python both locally and remotely.
- Testing – Configure test environments and discover, run, and debug tests.
- Settings reference – Explore the full range of Python-related settings in VS Code.
Python environments in VS Code
An “environment” in Python is the context in which a Python program runs that consists of an interpreter and any number of installed packages.
Note: If you’d like to become more familiar with the Python programming language, review More Python resources.
Create a Python source code file
From the File Explorer toolbar, select the New File button on the
hello
folder:
Name the file
hello.py
, and VS Code will automatically open it in the editor:
By using the
.py
file extension, you tell VS Code to interpret this file as a Python program, so that it evaluates the contents with the Python extension and the selected interpreter.
Note: The File Explorer toolbar also allows you to create folders within your workspace to better organize your code. You can use the New folder button to quickly create a folder.
Now that you have a code file in your Workspace, enter the following source code in
hello.py
:
msg = "Roll a dice" print(msg)
When you start typing
IntelliSense and auto-completions work for standard Python modules as well as other packages you’ve installed into the environment of the selected Python interpreter. It also provides completions for methods available on object types. For example, because the
msg
variable contains a string, IntelliSense provides string methods when you type
msg.
:
Finally, save the file (⌘S (Windows, Linux Ctrl+S)). At this point, you’re ready to run your first Python file in VS Code.
For full details on editing, formatting, and refactoring, see Editing code. The Python extension also has full support for Linting.
Other popular Python extensions
The Microsoft Python extension provides all of the features described previously in this article. Additional Python language support can be added to VS Code by installing other popular Python extensions.
- Open the Extensions view (⇧⌘X (Windows, Linux Ctrl+Shift+X)).
- Filter the extension list by typing ‘python’.
The extensions shown above are dynamically queried. Click on an extension tile above to read the description and reviews to decide which extension is best for you. See more in the Marketplace.
Run Python code
Click the Run Python File in Terminal play button in the top-right side of the editor.
The button opens a terminal panel in which your Python interpreter is automatically activated, then runs
python3 hello.py
(macOS/Linux) or
python hello.py
(Windows):
There are three other ways you can run Python code within VS Code:
-
Right-click anywhere in the editor window and select Run > Python File in Terminal (which saves the file automatically):
-
Select one or more lines, then press Shift+Enter or right-click and select Run Selection/Line in Python Terminal. This command is convenient for testing just a part of a file.
-
From the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), select the Python: Start REPL command to open a REPL terminal for the currently selected Python interpreter. In the REPL, you can then enter and run lines of code one at a time.
Congrats, you just ran your first Python code in Visual Studio Code!
Next steps
To learn how to build web apps with popular Python web frameworks, see the following tutorials:
There is then much more to explore with Python in Visual Studio Code:
- Python profile template – Create a new profile with a curated set of extensions, settings, and snippets
- Editing code – Learn about autocomplete, IntelliSense, formatting, and refactoring for Python.
- Linting – Enable, configure, and apply a variety of Python linters.
- Debugging – Learn to debug Python both locally and remotely.
- Testing – Configure test environments and discover, run, and debug tests.
- Settings reference – Explore the full range of Python-related settings in VS Code.
- Deploy Python to Azure App Service
- Deploy Python to Container Apps
Python in Visual Studio Code
Working with Python in Visual Studio Code, using the Microsoft Python extension, is simple, fun, and productive. The extension makes VS Code an excellent Python editor, and works on any operating system with a variety of Python interpreters. It leverages all of VS Code’s power to provide auto complete and IntelliSense, linting, debugging, and unit testing, along with the ability to easily switch between Python environments, including virtual and conda environments.
This article provides only an overview of the different capabilities of the Python extension for VS Code. For a walkthrough of editing, running, and debugging code, use the button below.
Initialize configurations
A configuration drives VS Code’s behavior during a debugging session. Configurations are defined in a
launch.json
file that’s stored in a
.vscode
folder in your workspace.
Note: To change debugging configuration, your code must be stored in a folder.
To initialize debug configurations, first select the Run view in the sidebar:
If you don’t yet have any configurations defined, you’ll see a button to Run and Debug and a link to create a configuration (launch.json) file:
To generate a
launch.json
file with Python configurations, do the following steps:
-
Select the create a launch.json file link (outlined in the image above) or use the Run > Open configurations menu command.
-
Select Python Debugger from the debugger options list.
-
A configuration menu will open from the Command Palette allowing you to choose the type of debug configuration you want to use for our Python project file. If you want to debug a single Python script, select Python File in the Select a debug configuration menu that appears.
Note: Starting a debugging session through the Debug Panel, F5 or Run > Start Debugging when no configuration exists will also bring up the debug configuration menu, but will not create a launch.json file.
-
The Python Debugger extension then creates and opens a
launch.json
file that contains a pre-defined configuration based on what you previously selected, in this case, Python File. You can modify configurations (to add arguments, for example), and also add custom configurations.
The details of configuration properties are covered later in this article under Standard configuration and options. Other configurations are also described in this article under Debugging specific app types.
Tips and Tricks for Efficient Python Development in VSCode
VSCode comes with awesome Python development features and extensions. We can customize them to our needs and improve the productivity. In this section, we will learn about tips and tricks for efficient Python development.
- Getting started: Help > Get Started. Learn about VSCode’s customization and features by following guided tutorials.
- Command Palette: access entire all available commands by using the Keyboard shortcut: Ctrl+Shift+P. By writing keywords, we can access specific commands.
- Keyboard shortcuts: better than command palettes. We can modify keyboard shortcuts or memorize them by using keyboard reference sheets. It will help us access the commands directly, instead of searching with the keyword.
- Command line: launch the VSCode editor through the command line interface by typing `code .`. We can also customize how the editor is launched by adding additional arguments.
- Errors and warnings: quick jump to errors and warnings in a project by using the keyboard shortcut: Ctrl+Shift+M. We can also cycle through the error with F8 or Shift+F8.
- Customization: VSCode allows us to customize themes, keyboard shortcuts, JSON validation, debugging settings, fonts, and many more. It is a fully customizable IDE.
- Extensions: other Python extensions improve our development experience. Look for popular extensions on the Visual Studio Marketplace.
- Multi cursor selection: is a lifesaver. Add cursors at arbitrary positions by using Alt+Click. It will allow us to modify multiple lines of code at once. We can also use Ctrl+Shift+L to modify all occurrences of the current selection.
- Search and modify: this is the best tool for searching and modifying multiple expressions at once. We can also rename the symbol by selecting the symbol and typing F2.
- Git integration: allows us to perform all Git-related tasks within IDE. It provides an easy-to-use GUI for diff, views, staging, branching, committing, merging, and more.
- Code Snippets: is our best friend. Just like Autohotkey, we are creating templates for repeating code patterns. To create a custom code snippet, select File > Preferences > Configure User Snippets and then select the language.
- GitHub Copilot: is a winner extension for all kinds of development. It enhances the coding experience with artificial intelligence (AI) by suggesting lines of code or entire functions.
Bonus: sync your settings by logging into your GitHub account. It will sync your settings across all of the machines.
Jupyter notebooks
To enable Python support for Jupyter notebook files (
.ipynb
) in VS Code, you can install the Jupyter extension. The Python and Jupyter extensions work together to give you a great Notebook experience in VS Code, providing you the ability to directly view and modify code cells with IntelliSense support, as well as run and debug them.
You can also convert and open the notebook as a Python code file through the Jupyter: Export to Python Script command. The notebook’s cells are delimited in the Python file with
#%%
comments, and the Jupyter extension shows Run Cell or Run Below CodeLens. Selecting either CodeLens starts the Jupyter server and runs the cell(s) in the Python interactive window:
You can also connect to a remote Jupyter server to run your notebooks. For more information, see Jupyter support.
Create a Python source code file
From the File Explorer toolbar, select the New File button on the
hello
folder:
Name the file
hello.py
, and VS Code will automatically open it in the editor:
By using the
.py
file extension, you tell VS Code to interpret this file as a Python program, so that it evaluates the contents with the Python extension and the selected interpreter.
Note: The File Explorer toolbar also allows you to create folders within your workspace to better organize your code. You can use the New folder button to quickly create a folder.
Now that you have a code file in your Workspace, enter the following source code in
hello.py
:
msg = "Roll a dice" print(msg)
When you start typing
IntelliSense and auto-completions work for standard Python modules as well as other packages you’ve installed into the environment of the selected Python interpreter. It also provides completions for methods available on object types. For example, because the
msg
variable contains a string, IntelliSense provides string methods when you type
msg.
:
Finally, save the file (⌘S (Windows, Linux Ctrl+S)). At this point, you’re ready to run your first Python file in VS Code.
For full details on editing, formatting, and refactoring, see Editing code. The Python extension also has full support for Linting.
How to create and open a Python project or file
If you have an existing Python project you wish to work on in VS Code, you can begin by opening your folder or file from the VS Code Welcome page or File Explorer view, or by selecting File > Open Folder (Ctrl+K Ctrl+O) or File > Open File (⌘O (Windows, Linux Ctrl+O)).
You can create a new Python file by selecting New File on the VS Code Welcome page and then selecting Python file, or by navigating to File > New File ().
Tip: If you already have a workspace folder open in VS Code, you can add new files or folders directly into your existing project. You can create new folders and files by using the corresponding New Folder or New File icons on the top level folder in the File Explorer view.
Troubleshooting
There are many reasons why the debugger may not work. Sometimes the debug console reveals specific causes, but the main reasons are as follows:
-
Make sure the Python Debugger extension is installed and enabled in VS Code by opening the Extensions view (⇧⌘X (Windows, Linux Ctrl+Shift+X)) and searching for
@installed python debugger
. -
The path to the python executable is incorrect: check the path of your selected interpreter by running the Python: Select Interpreter command and looking at the current value:
-
You have
"type"
set to the deprecated value
"python"
in your
launch.json
file: replace
"python"
with
"debugpy"
instead to work with the Python Debugger extension. -
There are invalid expressions in the watch window: clear all expressions from the Watch window and restart the debugger.
-
If you’re working with a multi-threaded app that uses native thread APIs (such as the Win32
CreateThread
function rather than the Python threading APIs), it’s presently necessary to include the following source code at the top of whichever file you want to debug:
import debugpy debugpy.debug_this_thread()
-
If you are working with a Linux system, you may receive a “timed out” error message when trying to apply a debugger to any running process. To prevent this, you can temporarily run the following command:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Autocomplete and IntelliSense
The Python extension supports code completion and IntelliSense using the currently selected interpreter. IntelliSense is a general term for a number of features, including intelligent code completion (in-context method and variable suggestions) across all your files and for built-in and third-party modules.
IntelliSense quickly shows methods, class members, and documentation as you type. You can also trigger completions at any time with ⌃Space (Windows, Linux Ctrl+Space). Hovering over identifiers will show more information about them.
Next steps
To learn how to build web apps with popular Python web frameworks, see the following tutorials:
There is much more to explore with Python in Visual Studio Code:
- Python profile template – Create a new profile with a curated set of extensions, settings, and snippets
- Editing code – Learn about autocomplete, IntelliSense, formatting, and refactoring for Python.
- Linting – Enable, configure, and apply a variety of Python linters.
- Debugging – Learn to debug Python both locally and remotely.
- Testing – Configure test environments and discover, run, and debug tests.
- Settings reference – Explore the full range of Python-related settings in VS Code.
Enable Visual Studio Code to seamlessly identify the correct runtime for your project, letting you leverage the security and compliance features inherent in the ActiveState project within your integrated development environment (IDE).
Before using your ActiveState project’s Python interpreter in your VS Code environment, make sure the following conditions are met:
state update. If you have installed the State Tool after opening VS Code you will need to restart VS Code for the changes to take effect.
The following will help you integrate Visual Studio Code with your ActiveState project.
Begin by creating a Python file in your project, or opening an existing Python file. If this is a new file you may be prompted to select an interpreter, or if it is an existing file you can select a new interpreter using the VS Code Command Palette.
To access the “Select Interpreter” drop-down from the Command Palette
This will automatically generate a list of all of the interpreters currently available on your machine (including those provided by ActiveState). Click to select your preferred interpreter and begin working on your file.
After making your selection your new interpreter will be displayed at the bottom of the VS Code window (“andrewd-activestate/PythonWindows3’:ActiveState” shown above).
If your ActiveState Python interpreter is not immediately available in the “Select Interpreter” dropdown:
python.activeStateToolPathunder the “Settings” list.
$PATHor
%PATH%variable. To enter the absolute path to the State Tool’s executable go to File > Preferences> Settings and search for ”State Tool”. Enter the absolute path to the State Tool executable in the field shown.
state projects
Additional configurations
By default, VS Code shows only the most common configurations provided by the Python Debugger extension. You can select other configurations to include in
launch.json
by using the Add Configuration command shown in the list and the
launch.json
editor. When you use the command, VS Code prompts you with a list of all available configurations (be sure to select the Python option):
Selecting the Attach using Process ID one yields the following result:
See Debugging specific app types for details on all of these configurations.
During debugging, the Status Bar shows the current configuration and the current debugging interpreter. Selecting the configuration brings up a list from which you can choose a different configuration:
By default, the debugger uses the same interpreter selected for your workspace, just like other features of Python extension for VS Code. To use a different interpreter for debugging specifically, set the value for
python
in
launch.json
for the applicable debugger configuration. Alternately, use the Python interpreter indicator on the Status Bar to select a different one.
Testing
The Python extension supports testing with Python’s built-in unittest framework and pytest.
In order to run tests, you must enable one of the supported testing frameworks in the settings of your project. Each framework has its own specific settings, such as arguments for identifying the paths and patterns for test discovery.
Once the tests have been discovered, VS Code provides a variety of commands (on the Status Bar, the Command Palette, and elsewhere) to run and debug tests. These commands also allow you to run individual test files and methods
Python profile template
Profiles let you quickly switch your extensions, settings, and UI layout depending on your current project or task. To help you get started with Python development, you can use the Python profile template, which is a curated profile with useful extensions, settings, and snippets. You can use the profile template as is or use it as a starting point to customize further for you own workflows.
You select a profile template through the Profiles > Create Profile… dropdown:
Once you select a profile template, you can review the settings and extensions, and remove individual items if you don’t want to include them in your new Profile. After creating the new profile based on the template, changes made to settings, extensions, or UI are persisted in your profile.
Conclusion
Visual Studio Code is one of the coolest general purpose editors and a great candidate for Python development. In this article, you learned:
- How to install VS Code on any platform
- How to find and install extensions to enable Python-specific features
- How VS Code makes writing a simple Python application easier
- How to run and debug existing Python programs within VS Code
- How to work with Git and GitHub repositories from VS Code
Visual Studio Code has become my default editor for Python and other tasks, and I hope you give it a chance to become yours as well.
If you have questions or comments, please reach out in the comments below. There is also a lot more information at the Visual Studio Code website than we could cover here.
The author sends thanks to Dan Taylor from the Visual Studio Code team at Microsoft for his time and invaluable input in this article.
Watch Now This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Python Development in Visual Studio Code (Setup Guide)
Install and configure Visual Studio Code for Python development
Install and configure Visual Studio Code to create a development environment for learning to build Python applications.
Run Python code
To experience Python, create a file (using the File Explorer) named
hello.py
and paste in the following code:
print("Hello World")
The Python extension then provides shortcuts to run Python code using the currently selected interpreter (Python: Select Interpreter in the Command Palette). To run the active Python file, click the Run Python File in Terminal play button in the top-right side of the editor.
You can also run individual lines or a selection of code with the Python: Run Selection/Line in Python Terminal command (Shift+Enter). If there isn’t a selection, the line with your cursor will be run in the Python Terminal. An identical Run Selection/Line in Python Terminal command is available on the context menu for a selection in the editor. The same terminal will be used every time you run a selection or a line in the terminal/REPL, until that terminal is closed. The same terminal is also used for Run Python File in Terminal. If that terminal is still running the REPL, you should exit the REPL (
exit()
) or switch to a different terminal before running a Python file.
The Python extension automatically removes indents based on the first non-empty line of the selection, shifting all other lines left as needed.
The command opens the Python Terminal if necessary; you can also open the interactive REPL environment directly using the Python: Start REPL command that activates a terminal with the currently selected interpreter and then runs the Python REPL.
For a more specific walkthrough and other ways of running code, see the run code tutorial.
Configure and run the debugger
Let’s now try debugging our Python program. Debugging support is provided by the Python Debugger extension, which is automatically installed with the Python extension. To ensure it has been installed correctly, open the Extensions view (⇧⌘X (Windows, Linux Ctrl+Shift+X)) and search for
@installed python debugger
. You should see the Python Debugger extension listed in the results.
Next, set a breakpoint on line 2 of
hello.py
by placing the cursor on the
Next, to initialize the debugger, press F5. Since this is your first time debugging this file, a configuration menu will open from the Command Palette allowing you to select the type of debug configuration you would like for the opened file.
Note: VS Code uses JSON files for all of its various configurations;
launch.json
is the standard name for a file containing debugging configurations.
Select Python File, which is the configuration that runs the current file shown in the editor using the currently selected Python interpreter.
The debugger will start, and then stop at the first line of the file breakpoint. The current line is indicated with a yellow arrow in the left margin. If you examine the Local variables window at this point, you can see that the
msg
variable appears in the Local pane.
A debug toolbar appears along the top with the following commands from left to right: continue (F5), step over (F10), step into (F11), step out (⇧F11 (Windows, Linux Shift+F11)), restart (⇧⌘F5 (Windows, Linux Ctrl+Shift+F5)), and stop (⇧F5 (Windows, Linux Shift+F5)).
The Status Bar also changes color (orange in many themes) to indicate that you’re in debug mode. The Python Debug Console also appears automatically in the lower right panel to show the commands being run, along with the program output.
To continue running the program, select the continue command on the debug toolbar (F5). The debugger runs the program to the end.
Tip Debugging information can also be seen by hovering over code, such as variables. In the case of
msg
, hovering over the variable will display the string
Roll a dice!
in a box above the variable.
You can also work with variables in the Debug Console (If you don’t see it, select Debug Console in the lower right area of VS Code, or select it from the … menu.) Then try entering the following lines, one by one, at the > prompt at the bottom of the console:
msg msg.capitalize() msg.split()
Select the blue Continue button on the toolbar again (or press F5) to run the program to completion. “Roll a dice!” appears in the Python Debug Console if you switch back to it, and VS Code exits debugging mode once the program is complete.
If you restart the debugger, the debugger again stops on the first breakpoint.
To stop running a program before it’s complete, use the red square stop button on the debug toolbar (⇧F5 (Windows, Linux Shift+F5)), or use the Run > Stop debugging menu command.
For full details, see Debugging configurations, which includes notes on how to use a specific Python interpreter for debugging.
Tip: Use Logpoints instead of print statements: Developers often litter source code with
Install a Python interpreter
Along with the Python extension, you need to install a Python interpreter. Which interpreter you use is dependent on your specific needs, but some guidance is provided below.
Windows
Install Python from python.org. Use the Download Python button that appears first on the page to download the latest version.
Note: If you don’t have admin access, an additional option for installing Python on Windows is to use the Microsoft Store. The Microsoft Store provides installs of supported Python versions.
For additional information about using Python on Windows, see Using Python on Windows at Python.org
macOS
The system install of Python on macOS is not supported. Instead, a package management system like Homebrew is recommended. To install Python using Homebrew on macOS use
brew install python3
at the Terminal prompt.
Note: On macOS, make sure the location of your VS Code installation is included in your PATH environment variable. See these setup instructions for more information.
Linux
The built-in Python 3 installation on Linux works well, but to install other Python packages you must install
pip
with get-pip.py.
Other options
-
Data Science: If your primary purpose for using Python is Data Science, then you might consider a download from Anaconda. Anaconda provides not just a Python interpreter, but many useful libraries and tools for data science.
-
Windows Subsystem for Linux: If you are working on Windows and want a Linux environment for working with Python, the Windows Subsystem for Linux (WSL) is an option for you. If you choose this option, you’ll also want to install the WSL extension. For more information about using WSL with VS Code, see VS Code Remote Development or try the Working in WSL tutorial, which will walk you through setting up WSL, installing Python, and creating a Hello World application running in WSL.
Note: To verify that you’ve installed Python successfully on your machine, run one of the following commands (depending on your operating system):
Linux/macOS: open a Terminal Window and type the following command:
python3 --version
Windows: open a command prompt and run the following command:
py -3 --version
If the installation was successful, the output window should show the version of Python that you installed. Alternatively, you can use the
py -0
command in the VS Code integrated terminal to view the versions of python installed on your machine. The default interpreter is identified by an asterisk (*).
Install and use packages
Let’s build upon the previous example by using packages.
In Python, packages are how you obtain any number of useful code libraries, typically from PyPI, that provide additional functionality to your program. For this example, you use the
numpy
package to generate a random number.
Return to the Explorer view (the top-most icon on the left side, which shows files), open
hello.py
, and paste in the following source code:
import numpy as np msg = "Roll a dice" print(msg) print(np.random.randint(1,9))
Tip: If you enter the above code by hand, you may find that auto-completions change the names after the
as
keywords when you press Enter at the end of a line. To avoid this, type a space, then Enter.
Next, run the file in the debugger using the “Python: Current file” configuration as described in the last section.
You should see the message, “ModuleNotFoundError: No module named ‘numpy'”. This message indicates that the required package isn’t available in your interpreter. If you’re using an Anaconda distribution or have previously installed the
numpy
package you may not see this message.
To install the
numpy
package, stop the debugger and use the Command Palette to run Terminal: Create New Terminal (⌃⇧` (Windows, Linux Ctrl+Shift+`)). This command opens a command prompt for your selected interpreter.
To install the required packages in your virtual environment, enter the following commands as appropriate for your operating system:
-
Install the packages
# Don't use with Anaconda distributions because they include matplotlib already. # macOS python3 -m pip install numpy # Windows (may require elevation) py -m pip install numpy # Linux (Debian) apt-get install python3-tk python3 -m pip install numpy
-
Now, rerun the program, with or without the debugger, to view the output!
Congrats on completing the Python tutorial! During the course of this tutorial, you learned how to create a Python project, create a virtual environment, run and debug your Python code, and install Python packages. Explore additional resources to learn how to get the most out of Python in Visual Studio Code!
Command line debugging
The debugger can also be run from the command line, if
debugpy
is installed in your Python environment.
Install debugpy
You can install debugpy using
python -m pip install --upgrade debugpy
into your Python environment.
Tip: While using a virtual environment is not required, it is a recommended best practice. You can create a virtual environment in VS Code by opening the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) and running the Python: Create Virtual Environment command ().
Command line syntax
The debugger command line syntax is as follows:
python -m debugpy --listen | --connect [
:][--wait-for-client] [--configure-
]... [--log-to] [--log-to-stderr]
| -m
| -c
| --pid[
]...
Example
From the command line, you could start the debugger using a specified port (5678) and script using the following syntax. This example assumes the script is long-running and omits the
--wait-for-client
flag, meaning that the script will not wait for the client to attach.
python -m debugpy --listen 5678 ./myscript.py
You would then use the following configuration to attach from the VS Code Python Debugger extension.
{ "name": "Python Debugger: Attach", "type": "debugpy", "request": "attach", "connect": { "host": "localhost", "port": 5678 } }
Note: Specifying host is optional for listen, by default 127.0.0.1 is used.
If you wanted to debug remote code or code running in a docker container, on the remote machine or container, you would need to modify the previous CLI command to specify a host.
python -m debugpy --listen 0.0.0.0:5678 ./myscript.py
The associated configuration file would then look as follows.
{ "name": "Attach", "type": "debugpy", "request": "attach", "connect": { "host": "remote-machine-name", // replace this with remote machine name "port": 5678 } }
Note: Be aware that when you specify a host value other than
127.0.0.1
or
localhost
you are opening a port to allow access from any machine, which carries security risks. You should make sure that you’re taking appropriate security precautions, such as using SSH tunnels, when doing remote debugging.
Command line options
Flag | Options | Description |
–listen or –connect | Required. Specifies the host address and port for the debug adapter server to wait for incoming connections (–listen) or to connect with a client that is waiting for an incoming connection (–connect). This is the same address that is used in the VS Code debug configuration. By default, the host address is | |
–wait-for-client | none | Optional. Specifies that the code should not run until there’s a connection from the debug server. This setting allows you to debug from the first line of your code. |
–log-to | Optional. Specifies a path to an existing directory for saving logs. | |
–log-to-stderr | none | Optional. Enables debugpy to write logs directly to stderr. |
–pid | Optional. Specifies a process that is already running to inject the debug server into. | |
–configure- | Optional. Sets a debug property that must be known to the debug server before the client connects. Such properties can be used directly in launch configuration, but must be set in this manner for attach configurations. For example, if you don’t want the debug server to automatically inject itself into subprocesses created by the process you’re attaching to, use |
Note:
[
can be used to pass command-line arguments along to the app being launched.
Code Actions
Code Actions (also known as Quick Fixes) are provided to help fix issues when there are warnings in your code. These helpful hints are displayed in the editor left margin as a lightbulb (💡). Select the light bulb to display Code Action options. These Code Action can come from extensions such as Python, Pylance, or VS Code itself. For more information about Code Actions, see Python Quick Fixes.
Run, debug, and test
Now that you are more familiar with Python in VS Code, let’s learn how to run, debug, and test your code.
Run
There are a few ways to run Python code in VS Code.
To run the Python script you have open on the editor, select the Run Python File in Terminal play button in the top-right of the editor.
There are also additional ways you can iteratively run snippets of your Python code within VS Code:
- Select one or more lines, then press Shift+Enter or right-click and select Run Selection/Line in Python Terminal. This command is convenient for testing just a part of a file.
- From the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), select the Python: Start REPL command to open a REPL terminal for the currently selected Python interpreter. In the REPL, you can then enter and run lines of code one at a time.
Debug
The debugger is a helpful tool that allows you to inspect the flow of your code execution and more easily identify errors, as well as explore how your variables and data change as your program is run. You can start debugging by setting a breakpoint in your Python project by clicking in the gutter next to the line you wish to inspect.
To start debugging, initialize the debugger by pressing F5. Since this is your first time debugging this file, a configuration menu will open allowing you to select the type of application you want to debug. If it’s a Python script, you can select Python File.
Once your program reaches the breakpoint, it will stop and allow you to track data in the Python Debug console, and progress through your program using the debug toolbar.
For a deeper dive into Python debugging functionality, see Python debugging in VS Code.
Test
The Python extension provides robust testing support for Unittest and pytest.
You can configure Python tests through the Testing view on the Activity Bar by selecting Configure Python Tests and selecting your test framework of choice.
You can also create tests for your Python project, which the Python extension will attempt to discover once your framework of choice is configured. The Python extension also allows you to run and debug your tests in the Testing view and inspect the test run output in the Test Results panel.
For a comprehensive look at testing functionality, see Python testing in VS Code.
Python and Visual Studio Code Setup
In this part, we will learn to install Python and VSCode and run a simple Python code.
Installing Python
Downloading and installing the latest version of Python is straightforward. Go to Python.org and download the latest version for Windows. The installer is also available for Linux/Unix, macOS, and other platforms. After downloading the installer, install Python with default settings.
Image from Python.org
The most popular way of installing Python is through Anaconda Distribution. It comes with a pre-installed package and software for us to start coding without hiccups. It is available for Windows, macOS, and Linux operating systems.
Image from Anaconda
After installing Python on our operating system, check whether it is properly working by typing the following command in CLI / Terminal.
python --version
Output:
Python 3.9.13
Other Python installation methods
We can also install Python using various CLI tools or through the Windows store.
You can check out our full guide on how to install Python for more details. Similarly, our interactive Introduction to Python course helps you master the basics of Python syntax, lists, functions, packages, and Numpy.
Installing VSCode
Installing VSCode is super simple. Download and install the stable build from the official website. The installer is available for all kinds of operating systems, including web browsers.
Image from Visual Studio Code
Other VSCode installation methods
We can install using Microsoft store, Snap Store, and multiple CLI tools for Windows, Linux, and macOS.
Running Python in VSCode
After installing Python and VSCode, it is time to write a simple code and run the Python file within the IDE.
Create a new file
At start, you will see the welcome note. Ignore that and go to File > New Text File or use the keyboard shortcut Ctrl + N to create a new file. After that, write a simple print expression to display “Hello World.”
Save Python file
Save the file using Ctrl + S. Select the file directory and type the file name. Make sure to add `.py` at the end of the file name.
Select the interpreter
To run the Python file, we need to select the Python interpreter. By default, the Anaconda environment comes with Python version 3.9.13.
Run a Python file
To run the Python file, simply click on the Run button on the top left, as shown in the image. It will initialize the terminal and run the Python file to display the output.
You can also type python test.py in the terminal to run the file present in the current directory.
Create a virtual environment
A best practice among Python developers is to use a project-specific
virtual environment
. Once you activate that environment, any packages you then install are isolated from other environments, including the global interpreter environment, reducing many complications that can arise from conflicting package versions. You can create non-global environments in VS Code using Venv or Anaconda with Python: Create Environment.
Open the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), start typing the Python: Create Environment command to search, and then select the command.
The command presents a list of environment types, Venv or Conda. For this example, select Venv.
The command then presents a list of interpreters that can be used for your project. Select the interpreter you installed at the beginning of the tutorial.
After selecting the interpreter, a notification will show the progress of the environment creation and the environment folder (
/.venv
) will appear in your workspace.
Ensure your new environment is selected by using the Python: Select Interpreter command from the Command Palette.
Note: For additional information about virtual environments, or if you run into an error in the environment creation process, see Environments.
Start VS Code in a workspace folder
By starting VS Code in a folder, that folder becomes your “workspace”.
Using a command prompt or terminal, create an empty folder called “hello”, navigate into it, and open VS Code (
code
) in that folder () by entering the following commands:
mkdir hello cd hello code .
Note: If you’re using an Anaconda distribution, be sure to use an Anaconda command prompt.
Alternately, you can create a folder through the operating system UI, then use VS Code’s File > Open Folder to open the project folder.
Python Debugger Extension
The Python Debugger extension is automatically installed along with the Python extension for VS Code. It offers debugging features with debugpy for several types of Python applications, including scripts, web apps, remote processes and more.
To verify it’s installed, open the Extensions view (⇧⌘X (Windows, Linux Ctrl+Shift+X)) and search for
@installed python debugger
. You should see the Python Debugger extension listed in the results.
You can refer to the extension’s README page for information on supported Python versions.
Conclusion
VSCode is not just a code editor. It is a complete ecosystem for efficient Python development. It provides us with shortcuts, Commands Palette, IntelliSense, linting, formatting, debugging, formatting, Git integrations, Jupyter notebook, third-party extensions, and a fully customizable development experience.
VSCode is highly recommended to beginners who are learning the basics of Python and data science. Complete Data Scientist with a Python career track to become a master in Python and data science. The career track consists of 25 courses and six projects to prepare you to become a professional data scientist.
A Deep Dive into the Phi-2 Model
Python List Size: 8 Different Methods for Finding the Length of a List in Python
An End-to-End ML Model Monitoring Workflow with NannyML in Python
Bex Tuychiev
15 min
Quick Start Guide for Python in VS Code
The Python extension makes Visual Studio Code an excellent Python editor, works on any operating system, and is usable with a variety of Python interpreters.
Get started by installing:
- VS Code
- A Python Interpreter (any actively supported Python version)
- Python extension from the VS Code Marketplace
To further customize VS Code for Python, you can leverage the Python profile template, automatically installing recommended extensions and settings. For Data Science projects, consider using the Data Science profile template.
Configuring Linting and Formatting in VSCode
Linting
Linting highlights the problems in the Python source code and provides us with suggestions. It generally highlights syntactical and stylistic issues. Linting helps you identify and correct coding issues that can lead to errors.
You can select the linting method by selecting Python: Select Linter command in the command palette (Ctrl+Shift+P). You can also manually enable the linting method in settings.
Select linting method
In our case, we have selected the flake8 method. You can also review the list of available linting methods.
- Enable/ Disable Linting: select Python: Enable/Disable Linting in command palette.
- Run Linting: command palette (Ctrl+Shift+P) > Python: Run Linting.
Fixing the error
After running the Python linter, you will see the issues with the suggestions.
Note: Enabling a different linter will prompt you to install the required Python package.
Formatting
Formatting makes code readable. It follows specific rules for line spacing, indents, spacing around operators, and closing brackets. The Python extension supports three Python formatting methods: autopep8, black, or yapf.
By reading about PEP-8: Python Naming Conventions & Code Standards, you can learn Python’s style guide and formatting rules.
Select the Python formatter
To access the formatting option, we have to open the settings panel by going to Preferences -> Settings or using the keyboard shortcut: Ctrl +,. After that, type “python formatting provider” in the search bar and select “black” from the dropdown menu.
Configure Python formatter
For formatting the Python file on save, we have to search for format on save in the Settings and enable the Editor: Format on Save option.
Configure and run the debugger
Let’s now try debugging our Python program. Debugging support is provided by the Python Debugger extension, which is automatically installed with the Python extension. To ensure it has been installed correctly, open the Extensions view (⇧⌘X (Windows, Linux Ctrl+Shift+X)) and search for
@installed python debugger
. You should see the Python Debugger extension listed in the results.
Next, set a breakpoint on line 2 of
hello.py
by placing the cursor on the
Next, to initialize the debugger, press F5. Since this is your first time debugging this file, a configuration menu will open from the Command Palette allowing you to select the type of debug configuration you would like for the opened file.
Note: VS Code uses JSON files for all of its various configurations;
launch.json
is the standard name for a file containing debugging configurations.
Select Python File, which is the configuration that runs the current file shown in the editor using the currently selected Python interpreter.
The debugger will start, and then stop at the first line of the file breakpoint. The current line is indicated with a yellow arrow in the left margin. If you examine the Local variables window at this point, you can see that the
msg
variable appears in the Local pane.
A debug toolbar appears along the top with the following commands from left to right: continue (F5), step over (F10), step into (F11), step out (⇧F11 (Windows, Linux Shift+F11)), restart (⇧⌘F5 (Windows, Linux Ctrl+Shift+F5)), and stop (⇧F5 (Windows, Linux Shift+F5)).
The Status Bar also changes color (orange in many themes) to indicate that you’re in debug mode. The Python Debug Console also appears automatically in the lower right panel to show the commands being run, along with the program output.
To continue running the program, select the continue command on the debug toolbar (F5). The debugger runs the program to the end.
Tip Debugging information can also be seen by hovering over code, such as variables. In the case of
msg
, hovering over the variable will display the string
Roll a dice!
in a box above the variable.
You can also work with variables in the Debug Console (If you don’t see it, select Debug Console in the lower right area of VS Code, or select it from the … menu.) Then try entering the following lines, one by one, at the > prompt at the bottom of the console:
msg msg.capitalize() msg.split()
Select the blue Continue button on the toolbar again (or press F5) to run the program to completion. “Roll a dice!” appears in the Python Debug Console if you switch back to it, and VS Code exits debugging mode once the program is complete.
If you restart the debugger, the debugger again stops on the first breakpoint.
To stop running a program before it’s complete, use the red square stop button on the debug toolbar (⇧F5 (Windows, Linux Shift+F5)), or use the Run > Stop debugging menu command.
For full details, see Debugging configurations, which includes notes on how to use a specific Python interpreter for debugging.
Tip: Use Logpoints instead of print statements: Developers often litter source code with
Debugging and Testing in VSCode
Debugging
The Python extension comes with Debugging for all kinds of applications like multi-threaded, web, and remote applications. We can set breakpoints, inspect data, and run programs step by step.
Select a debug configuration
Launch the debug tab by clicking on the debug icon on the action bar or by using the keyboard shortcut Ctrl + Shift +D. To customize Debug options, click on create a launch.json file and select Python File.
Debug Panel
Run the Debug by clicking on the blue button Run and Debug, and it will run the Python file and show us the Variables, Watch, Call Stack, and breakpoints.
Quick debug
For quick debugging, you can always click on the down arrow beside the Run button and select Debug Python File.
Testing
The Python extension supports unittest and pytest testing frameworks. Instead of reading the test results in a terminal, you can review and resolve the issues within the Testing tab in an active bar.
Configure Python tests
After clicking on the Testing button, we will click on the Configure Python Tests button and select the testing framework. Usually, VSCode automatically detects the framework and displays all the tests in a tree view.
Learn about Python unit testing, implementing Python’s pytest testing framework by following our how to use pytest for unit testing tutorial.
Note: The testing example that we are using is from Visual Studio Code official documentation.
Run the unittest
We can run the Unit test by clicking on the Run Test button in the Testing tab and analyzing the results.
As we can observe, 1 of 2 tests have passed, and it has displayed the reasoning behind the failed result. VSCode testing is highly interactive and user-friendly.
Set configuration options
When you first create
launch.json
, there are two standard configurations that run the active file in the editor in either the integrated terminal (inside VS Code) or the external terminal (outside of VS Code):
{ "configurations": [ { "name": "Python Debugger: Current File (Integrated Terminal)", "type": "debugpy", "request": "launch", "program": "${file}", "console": "integratedTerminal" }, { "name": "Python Debugger: Current File (External Terminal)", "type": "debugpy", "request": "launch", "program": "${file}", "console": "externalTerminal" } ] }
The specific settings are described in the following sections. You can also add other settings, such as
args
, that aren’t included in the standard configurations.
Tip: It’s often helpful in a project to create a configuration that runs a specific startup file. For example, if you want to always launch
startup.py
with the arguments
--port 1593
when you start the debugger, create a configuration entry as follows:
{ "name": "Python Debugger: startup.py", "type": "debugpy", "request": "launch", "program": "${workspaceFolder}/startup.py", "args" : ["--port", "1593"] },
name
Provides the name for the debug configuration that appears in the VS Code dropdown list.
type
Identifies the type of debugger to use; leave this set to
debugpy
for debugging Python code.
request
Specifies the mode in which to start debugging:
-
launch
: start the debugger on the file specified in
program
-
attach
: attach the debugger to an already running process. See Remote debugging for an example.
program
Provides the fully qualified path to the python program’s entry module (startup file). The value
${file}
, often used in default configurations, uses the currently active file in the editor. By specifying a specific startup file, you can always be sure of launching your program with the same entry point regardless of which files are open. For example:
"program": "/Users/Me/Projects/MyProject/src/event_handlers/__init__.py",
You can also rely on a relative path from the workspace root. For example, if the root is
/Users/Me/Projects/MyProject
then you can use the following example:
"program": "${workspaceFolder}/src/event_handlers/__init__.py",
module
Provides the ability to specify the name of a module to be debugged, similarly to the
-m
argument when run at the command line. For more information, see Python.org
python
The full path that points to the Python interpreter to be used for debugging.
If not specified, this setting defaults to the interpreter selected for your workspace, which is equivalent to using the value
${command:python.interpreterPath}
. To use a different interpreter, specify its path instead in the
python
property of a debug configuration.
Alternately, you can use a custom environment variable that’s defined on each platform to contain the full path to the Python interpreter to use, so that no other folder paths are needed.
If you need to pass arguments to the Python interpreter, you can use the
pythonArgs
property.
pythonArgs
Specifies arguments to pass to the Python interpreter using the syntax
"pythonArgs": ["
", "
",...]
.
args
Specifies arguments to pass to the Python program. Each element of the argument string that’s separated by a space should be contained within quotes, for example:
"args": ["--quiet", "--norepeat", "--port", "1593"],
If you want to provide different arguments per debug run, you can set
args
to
${command:pickArgs}
. This will prompt you to enter arguments each time you start a debug session.
stopOnEntry
When set to
true
, breaks the debugger at the first line of the program being debugged. If omitted (the default) or set to
false
, the debugger runs the program to the first breakpoint.
console
Specifies how program output is displayed as long as the defaults for
redirectOutput
aren’t modified.
Value | Where output is displayed |
VS Code debug console. If | |
VS Code Integrated Terminal. If | |
Separate console window. If |
purpose
There is more than one way to configure the Run button, using the
purpose
option. Setting the option to
debug-test
, defines that the configuration should be used when debugging tests in VS Code.
However, setting the option to
debug-in-terminal
, defines that the configuration should only be used when accessing the Run Python File button on the top-right of the editor (regardless of whether the Run Python File or Debug Python File options the button provides is used).
Note: The
purpose
option can’t be used to start the debugger through F5 or Run > Start Debugging.
autoReload
Allows for the automatic reload of the debugger when changes are made to code after the debugger execution has hit a breakpoint. To enable this feature set
{"enable": true}
as shown in the following code.
{ "name": "Python Debugger: Current File", "type": "debugpy", "request": "launch", "program": "${file}", "console": "integratedTerminal", "autoReload": { "enable": true } }
Note: When the debugger performs a reload, code that runs on import might be executed again. To avoid this situation, try to only use imports, constants, and definitions in your module, placing all code into functions. Alternatively, you can also use
if __name__=="__main__"
checks.
subProcess
Specifies whether to enable subprocess debugging. Defaults to
false
, set to
true
to enable. For more information, see multi-target debugging.
cwd
Specifies the current working directory for the debugger, which is the base folder for any relative paths used in code. If omitted, defaults to
${workspaceFolder}
(the folder open in VS Code).
As an example, say
${workspaceFolder}
contains a
py_code
folder containing
app.py
, and a
data
folder containing
salaries.csv
. If you start the debugger on
py_code/app.py
, then the relative paths to the data file vary depending on the value of
cwd
:
cwd | Relative path to data file |
Omitted or |
redirectOutput
When set to
true
(the default for internalConsole), causes the debugger to print all output from the program into the VS Code debug output window. If set to
false
(the default for integratedTerminal and externalTerminal), program output is not displayed in the debugger output window.
This option is typically disabled when using
"console": "integratedTerminal"
or
"console": "externalTerminal"
because there’s no need to duplicate the output in the debug console.
justMyCode
When omitted or set to
true
(the default), restricts debugging to user-written code only. Set to
false
to also enable debugging of standard library functions.
django
When set to
true
, activates debugging features specific to the Django web framework.
sudo
When set to
true
and used with
"console": "externalTerminal"
, allows for debugging apps that require elevation. Using an external console is necessary to capture the password.
pyramid
When set to
true
, ensures that a Pyramid app is launched with the necessary
pserve
command.
env
Sets optional environment variables for the debugger process beyond system environment variables, which the debugger always inherits. The values for these variables must be entered as strings.
envFile
Optional path to a file that contains environment variable definitions. See Configuring Python environments – environment variable definitions file.
gevent
If set to
true
, enables debugging of gevent monkey-patched code.
jinja
When set to
true
, activates debugging features specific to the Jinja templating framework.
Start a New Python Program
Let’s start our exploration of Python development in Visual Studio Code with a new Python program. In VS Code, type Ctrl+N to open a new File. (You can also select File, New from the menu.)
Note: The Visual Studio Code UI provides the Command Palette, from which you can search and execute any command without leaving the keyboard. Open the Command Palette using Ctrl+Shift+P, type
File: New File
, and hit Enter to open a new file.
No matter how you get there, you should see a VS Code window that looks similar to the following:
Once a new file is opened, you can begin entering code.
Entering Python Code
For our test code, let’s quickly code up the Sieve of Eratosthenes (which finds all primes less than a given number). Begin typing the following code in the new tab you just opened:
sieve = [True] * 101 for i in range(2, 100):
You should see something similar to this:
Wait, what’s going on? Why isn’t Visual Studio Code doing any keyword highlighting, any auto-formatting, or anything really helpful? What gives?
The answer is that, right now, VS Code doesn’t know what kind of file it’s dealing with. The buffer is called
Untitled-1
, and if you look in the lower right corner of the window, you’ll see the words Plain Text.
To activate the Python extension, save the file (by selecting File, Save from the menu, File:Save File from the Command Palette, or just using Ctrl+S) as
sieve.py
. VS Code will see the
.py
extension and correctly interpret the file as Python code. Now your window should look like this:
That’s much better! VS Code automatically reformats the file as Python, which you can verify by inspecting the language mode in the lower left corner.
If you have multiple Python installations (like Python 2.7, Python 3.x, or Anaconda), you can change which Python interpreter VS Code uses by clicking the language mode indicator, or selecting Python: Select Interpreter from the Command Palette. VS Code supports formatting using
pep8
by default, but you can select
black
or
yapf
if you wish.
Let’s add the rest of the Sieve code now. To see IntelliSense at work, type this code directly rather than cut and paste, and you should see something like this:
Here’s the full code for a basic Sieve of Eratosthenes:
sieve = [True] * 101 for i in range(2, 100): if sieve[i]: print(i) for j in range(i*i, 100, i): sieve[j] = False
As you type this code, VS Code automatically indents the lines under
for
and
if
statements for you properly, adds closing parentheses, and makes suggestions for you. That’s the power of IntelliSense working for you.
Running Python Code
Now that the code is complete, you can run it. There is no need to leave the editor to do this: Visual Studio Code can run this program directly in the editor. Save the file (using Ctrl+S), then right-click in the editor window and select Run Python File in Terminal:
You should see the Terminal pane appear at the bottom of the window, with your code output showing.
Python Linting Support
You may have seen a pop up appear while you were typing, stating that linting was not available. You can quickly install linting support from that pop up, which defaults to PyLint. VS Code also supports other linters. Here’s the complete list at the time of this writing:
-
pylint
-
flake8
-
mypy
-
pydocstyle
-
pep8
-
prospector
-
pyllama
-
bandit
The Python linting page has complete details on how to setup each linter.
Note: The choice of linter is a project workspace setting, and not a global user setting.
Working with Python interpreters
Select and activate an environment
The Python extension tries to find and then select what it deems the best environment for the workspace. If you would prefer to select a specific environment, use the Python: Select Interpreter command from the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)).
Note: If the Python extension doesn’t find an interpreter, it issues a warning. On macOS 12.2 and older, the extension also issues a warning if you’re using the OS-installed Python interpreter as it is known to have compatibility issues. In either case, you can disable these warnings by setting
python.disableInstallationCheck
to
true
in your user settings.
The Python: Select Interpreter command displays a list of available global environments, conda environments, and virtual environments. (See the Where the extension looks for environments section for details, including the distinctions between these types of environments.) The following image, for example, shows several Anaconda and CPython installations along with a conda environment and a virtual environment (
env
) that’s located within the workspace folder:
Note: On Windows, it can take a little time for VS Code to detect available conda environments. During that process, you may see “(cached)” before the path to an environment. The label indicates that VS Code is presently working with cached information for that environment.
If you have a folder or a workspace open in VS Code and you select an interpreter from the list, the Python extension will store that information internally. This ensures that the same interpreter will be used when you reopen the workspace.
The selected environment is used by the Python extension for running Python code (using the Python: Run Python File in Terminal command), providing language services (auto-complete, syntax checking, linting, formatting, etc.) when you have a
.py
file open in the editor, and opening a terminal with the Terminal: Create New Terminal command. In the latter case, VS Code automatically activates the selected environment.
Tip: To prevent automatic activation of a selected environment, add
"python.terminal.activateEnvironment": false
to your
settings.json
file (it can be placed anywhere as a sibling to the existing settings).
Tip: If the activate command generates the message “Activate.ps1 is not digitally signed. You cannot run this script on the current system.”, then you need to temporarily change the PowerShell execution policy to allow scripts to run (see About Execution Policies in the PowerShell documentation):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
Note: By default, VS Code uses the interpreter selected for your workspace when debugging code. You can override this behavior by specifying a different path in the
python
property of a debug configuration. See Choose a debugging environment.
The selected interpreter version will show on the right side of the Status Bar.
The Status Bar also reflects when no interpreter is selected.
In either case, clicking this area of the Status Bar is a convenient shortcut for the Python: Select Interpreter command.
Tip: If you have any problems with VS Code recognizing a virtual environment, please file an issue so we can help determine the cause.
Manually specify an interpreter
If VS Code doesn’t automatically locate an interpreter you want to use, you can browse for the interpreter on your file system or provide the path to it manually.
You can do so by running the Python: Select Interpreter command and select the Enter interpreter path… option that shows on the top of the interpreters list:
You can then either enter the full path of the Python interpreter directly in the text box (for example, “.venv/Scripts/python.exe”), or you can select the Find… button and browse your file system to find the python executable you wish to select.
If you want to manually specify a default interpreter that will be used when you first open your workspace, you can create or modify an entry for the
python.defaultInterpreterPath
setting.
Note: Changes to the
python.defaultInterpreterPath
setting are not picked up after an interpreter has already been selected for a workspace; any changes to the setting will be ignored once an initial interpreter is selected for the workspace.
Additionally, if you’d like to set up a default interpreter to all of your Python applications, you can add an entry for
python.defaultInterpreterPath
manually inside your User Settings. To do so, open the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) and enter Preferences: Open User Settings. Then set
python.defaultInterpreterPath
, which is in the Python extension section of User Settings, with the appropriate interpreter.
How the extension chooses an environment automatically
If an interpreter hasn’t been specified, then the Python extension automatically selects the interpreter with the highest version in the following priority order:
- Virtual environments located directly under the workspace folder.
- Virtual environments related to the workspace but stored globally. For example, Pipenv or Poetry environments that are located outside of the workspace folder.
-
Globally installed interpreters. For example, the ones found in
/usr/local/bin
,
C:\\python38
, etc.
Note: The interpreter selected may differ from what
python
refers to in your terminal.
If Visual Studio Code doesn’t locate your interpreter automatically, you can manually specify an interpreter.
Where the extension looks for environments
The extension automatically looks for interpreters in the following locations, in no particular order:
-
Standard install paths such as
/usr/local/bin
,
/usr/sbin
,
/sbin
,
c:\\python36
, etc. - Virtual environments located directly under the workspace (project) folder.
-
Virtual environments located in the folder identified by the
python.venvPath
setting (see General Python settings), which can contain multiple virtual environments. The extension looks for virtual environments in the first-level subfolders of
venvPath
. -
Virtual environments located in a
~/.virtualenvs
folder for virtualenvwrapper. - Interpreters created by pyenv, Pipenv, and Poetry.
-
Virtual environments located in the path identified by
WORKON_HOME
(as used by virtualenvwrapper). -
Conda environments found by
conda env list
. Conda environments which do not have an interpreter will have one installed for them upon selection. -
Interpreters installed in a
.direnv
folder for direnv under the workspace folder.
Environments and Terminal windows
After using Python: Select Interpreter, that interpreter is applied when right-clicking a file and selecting Python: Run Python File in Terminal. The environment is also activated automatically when you use the Terminal: Create New Terminal command unless you change the
python.terminal.activateEnvironment
setting to
false
.
Please note that launching VS Code from a shell in which a specific Python environment is activated doesn’t automatically activate that environment in the default Integrated Terminal.
Note: conda environments cannot be automatically activated in the integrated terminal if PowerShell is set as the integrated shell. See Integrated terminal – Terminal profiles for how to change the shell.
Changing interpreters with the Python: Select Interpreter command doesn’t affect terminal panels that are already open. Thus, you can activate separate environments in a split terminal: select the first interpreter, create a terminal for it, select a different interpreter, then use the split button (⌘\ (Windows, Linux Ctrl+Shift+5)) in the terminal title bar.
Choose a debugging environment
By default, the debugger will use the Python interpreter chosen with the Python extension. However, if there is a
python
property specified in the debug configuration of
launch.json
, it takes precedence. If this property is not defined, it will fall back to using the Python interpreter path selected for the workspace.
For more details on debug configuration, see Debugging configurations.
Installing Essential VSCode Python Extensions
The VSCode’s Python extensions will provide us with the helping functionalities for code editing, docstrings, linting, formatting, debugging, testing, and environment selection.
How to install a VSCode Extension
Click on the box icon on the activity bar or use a keyboard shortcut: Ctrl + Shift + X to open the extension panel. Type any keyword in the search bar to explore all kinds of extensions.
Install VSCode Python extension
In our case, we will type Python and install the Python extension by clicking on the install button, as shown above.
List of Essential Python Extensions
Python
The Python extension automatically installs Pylance, Jupyter, and isort extensions. It comes with a complete collection of tools for Data Science, web development, and software engineering.
Key Features:
Python extension comes with IntelliSense, linting, debugging, code navigation, code formatting, refactoring, variable explorer, and test explorer.
- IntelliSense (code autocomplete)
- Linting (Pylint, Flake8)
- Code formatting (black, autopep)
- Debugging
- Testing (unittest, pytest)
- Jupyter Notebooks
- Environments (venv, pipenv, conda)
- Refactoring
Indent-rainbow
Indent-rainbow extensions provide us with a multilevel colorized indentation for improved code readability. We get alternating colors on each step, and it helps us avoid common indentation errors.
Python Indent
Python Indent extension helps us with creating indentations. By pressing the Enter key, the extension will parse the Python file and determine how the next line should be indented. It is a time saver.
Jupyter Notebook Renderers
Jupyter Notebook Renderers is part of the Jupyter extension pack. It helps us render plotly, vega, gif, png, svg, and jpeg output.
autoDocstring
The autoDocstring extension helps us quickly generate docstring for Python functions. By typing triple quotes “”” or ”’ within the function, we can generate and modify docstring. Learn more about doc strings by following our Python Docstrings tutorial.
Note: Most Python development extensions and features come with Python extensions.
Prerequisites
- Ability to install programs locally.
- Basic familiarity with programming concepts.
- Introduction min
- Install Python 3 min
- Knowledge check min
- Summary min
Python debugging in VS Code
The Python extension supports debugging through the Python Debugger extension for several types of Python applications. For a short walkthrough of basic debugging, see Tutorial – Configure and run the debugger. Also see the Flask tutorial. Both tutorials demonstrate core skills like setting breakpoints and stepping through code.
For general debugging features such as inspecting variables, setting breakpoints, and other activities that aren’t language-dependent, review VS Code debugging.
This article mainly addresses Python-specific debugging configurations, including the necessary steps for specific app types and remote debugging.
Run, debug, and test
Now that you are more familiar with Python in VS Code, let’s learn how to run, debug, and test your code.
Run
There are a few ways to run Python code in VS Code.
To run the Python script you have open on the editor, select the Run Python File in Terminal play button in the top-right of the editor.
There are also additional ways you can iteratively run snippets of your Python code within VS Code:
- Select one or more lines, then press Shift+Enter or right-click and select Run Selection/Line in Python Terminal. This command is convenient for testing just a part of a file.
- From the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), select the Python: Start REPL command to open a REPL terminal for the currently selected Python interpreter. In the REPL, you can then enter and run lines of code one at a time.
Debug
The debugger is a helpful tool that allows you to inspect the flow of your code execution and more easily identify errors, as well as explore how your variables and data change as your program is run. You can start debugging by setting a breakpoint in your Python project by clicking in the gutter next to the line you wish to inspect.
To start debugging, initialize the debugger by pressing F5. Since this is your first time debugging this file, a configuration menu will open allowing you to select the type of application you want to debug. If it’s a Python script, you can select Python File.
Once your program reaches the breakpoint, it will stop and allow you to track data in the Python Debug console, and progress through your program using the debug toolbar.
For a deeper dive into Python debugging functionality, see Python debugging in VS Code.
Test
The Python extension provides robust testing support for Unittest and pytest.
You can configure Python tests through the Testing view on the Activity Bar by selecting Configure Python Tests and selecting your test framework of choice.
You can also create tests for your Python project, which the Python extension will attempt to discover once your framework of choice is configured. The Python extension also allows you to run and debug your tests in the Testing view and inspect the test run output in the Test Results panel.
For a comprehensive look at testing functionality, see Python testing in VS Code.
Types of Python environments
Global environments
By default, any Python interpreter installed runs in its own global environment. For example, if you just run
python
,
python3
, or
py
at a new terminal (depending on how you installed Python), you’re running in that interpreter’s global environment. Any packages that you install or uninstall affect the global environment and all programs that you run within it.
Tip: In Python, it is best practice to create a workspace-specific environment, for example, by using a local environment.
Local environments
There are two types of environments that you can create for your workspace: virtual and conda. These environments allow you to install packages without affecting other environments, isolating your workspace’s package installations.
Virtual environments
A virtual environment is a built-in way to create an environment. A virtual environment creates a folder that contains a copy (or symlink) to a specific interpreter. When you install packages into a virtual environment it will end up in this new folder, and thus isolated from other packages used by other workspaces.
Note: While it’s possible to open a virtual environment folder as a workspace, doing so is not recommended and might cause issues with using the Python extension.
Conda environments
A conda environment is a Python environment that’s managed using the
conda
package manager (see Getting started with conda).Choosing between conda and virtual environments depends on your packaging needs, team standards, etc.
Python environment tools
The following table lists the various tools involved with Python environments:
Tool | Definition and Purpose |
pip | The Python package manager that installs and updates packages. It’s installed with Python 3.9+ by default (unless you are on a Debian-based OS; install |
venv | Allows you to manage separate package installations for different projects and is installed with Python 3 by default (unless you are on a Debian-based OS; install |
conda | Installed with Miniconda. It can be used to manage both packages and virtual environments. Generally used for data science projects. |
Environment variables
Environment variable definitions file
An environment variable definitions file is a text file containing key-value pairs in the form of
environment_variable=value
, with used for comments. Multiline values aren’t supported, but references to previously defined environment variables are allowed. Environment variable definitions files can be used for scenarios such as debugging and tool execution (including linters, formatters, IntelliSense, and testing tools), but aren’t applied to the terminal.
Note: Environment variable definitions files are not necessarily cross-platform. For instance, while Unix uses
as a path separator in environment variables, Windows uses. There is no normalization of such operating system differences, and so you need to make sure any environment definitions file use values that are compatible with your operating system.
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.
Note: Environment variable definitions files are not used in all situations where environment variables are available for use. Unless Visual Studio Code documentation states otherwise, these only affect certain scenarios as per their definition. For example, the extension doesn’t use environment variable definitions files when resolving setting values.
A debug configuration also contains an
envFile
property that also defaults to the
.env
file in the current workspace (see Debugging – Set configuration options). This property allows you to easily set variables for debugging purposes that replace variables specified in the default
.env
file.
For example, when developing a web application, you might want to easily switch between development and production servers. Instead of coding the different URLs and other settings into your application directly, you could use separate definitions files for each. For example:
dev.env file
# dev.env - development configuration # API endpoint MYPROJECT_APIENDPOINT=https://my.domain.com/api/dev/ # Variables for the database MYPROJECT_DBURL=https://my.domain.com/db/dev MYPROJECT_DBUSER=devadmin MYPROJECT_DBPASSWORD=!dfka**213=
prod.env file
# prod.env - production configuration # API endpoint MYPROJECT_APIENDPOINT=https://my.domain.com/api/ # Variables for the database MYPROJECT_DBURL=https://my.domain.com/db/ MYPROJECT_DBUSER=coreuser MYPROJECT_DBPASSWORD=kKKfa98*11@
You can then set the
python.envFile
setting to
${workspaceFolder}/prod.env
, then set the
envFile
property in the debug configuration to
${workspaceFolder}/dev.env
.
Note: When environment variables are specified using multiple methods, be aware that there is an order of precedence. All
env
variables defined in the
launch.json
file will override variables contained in the
.env
file, specified by the
python.envFile
setting (user or workspace). Similarly,
env
variables defined in the
launch.json
file will override the environment variables defined in the
envFile
that are specified in
launch.json
.
Use of the PYTHONPATH variable
The PYTHONPATH environment variable specifies additional locations where the Python interpreter should look for modules. In VS Code, PYTHONPATH can be set through the terminal settings (
terminal.integrated.env.*
) and/or within an
.env
file.
When the terminal settings are used, PYTHONPATH affects any tools that are run within the terminal by a user, as well as any action the extension performs for a user that is routed through the terminal such as debugging. However, in this case when the extension is performing an action that isn’t routed through the terminal, such as the use of a linter or formatter, then this setting won’t have an effect on module look-up.
Git Integration
VS Code has built-in support for source control management, and ships with support for Git and GitHub right out of the box. You can install support for other SCM’s in VS Code, and use them side by side. Source control is accessible from the Source Control view:
If your project folder contains a
.git
folder, VS Code automatically turns on the full range of Git/GitHub functionality. Here are some of the many tasks you can perform:
- Commit files to Git
- Push changes to, and pull changes from, remote repos
- Check-out existing or create new branches and tags
- View and resolve merge conflicts
- View diffs
All of this functionality is available directly from the VS Code UI:
VS Code will also recognize changes made outside the editor and behave appropriately.
Committing your recent changes within VS Code is a fairly straightforward process. Modified files are shown in the Source Control view with an M marker, while new untracked files are marked with a U. Stage your changes by hovering over the file and then clicking the plus sign (+). Add a commit message at the top of the view, and then click the check mark to commit the changes:
You can push local commits to GitHub from within VS Code as well. Select Sync from the Source Control view menu, or click Synchronize Changes on the status bar next to the branch indicator.
More Python resources
- Getting Started with Python in VS Code – Learn how to edit, run, and debug code in VS Code.
- Virtual Environments and Packages (Python.org) – Learn more about virtual environments and packages.
- Installing Python Modules (Python.org) – Learn how to install Python modules.
- Python tutorial (Python.org) – Learn more about the Python language.
Watch Now This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Python Development in Visual Studio Code (Setup Guide)
One of the coolest code editors available to programmers, Visual Studio Code, is an open-source, extensible, light-weight editor available on all platforms. It’s these qualities that make Visual Studio Code from Microsoft very popular, and a great platform for Python development.
In this article, you’ll learn about Python development in Visual Studio Code, including how to:
- Install Visual Studio Code
- Discover and install extensions that make Python development easy
- Write a straightforward Python application
- Learn how to run and debug existing Python programs in VS Code
- Connect Visual Studio Code to Git and GitHub to share your code with the world
We assume you are familiar with Python development and already have some form of Python installed on your system (Python 2.7, Python 3.6/3.7, Anaconda, or others). Screenshots and demos for Ubuntu and Windows are provided. Because Visual Studio Code runs on all major platforms, you may see slightly different UI elements and may need to modify certain commands.
If you already have a basic VS Code setup and you’re hoping to dig deeper than the goals in this tutorial, you might want to explore some advanced features in VS Code.
Free Bonus: 5 Thoughts On Python Mastery, a free course for Python developers that shows you the roadmap and the mindset you’ll need to take your Python skills to the next level.
Create a virtual environment
A best practice among Python developers is to use a project-specific
virtual environment
. Once you activate that environment, any packages you then install are isolated from other environments, including the global interpreter environment, reducing many complications that can arise from conflicting package versions. You can create non-global environments in VS Code using Venv or Anaconda with Python: Create Environment.
Open the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), start typing the Python: Create Environment command to search, and then select the command.
The command presents a list of environment types, Venv or Conda. For this example, select Venv.
The command then presents a list of interpreters that can be used for your project. Select the interpreter you installed at the beginning of the tutorial.
After selecting the interpreter, a notification will show the progress of the environment creation and the environment folder (
/.venv
) will appear in your workspace.
Ensure your new environment is selected by using the Python: Select Interpreter command from the Command Palette.
Note: For additional information about virtual environments, or if you run into an error in the environment creation process, see Environments.
Basic debugging
If you’re only interested in debugging a Python script, the simplest way is to select the down-arrow next to the run button on the editor and select Python Debugger: Debug Python File.
If you’re looking to debug a web application using Flask, Django or FastAPI, the Python Debugger extension provides dynamically created debug configurations based on your project structure under the Show all automatic debug configurations option, through the Run and Debug view.
But if you’re looking to debug other kinds of applications, you can start the debugger through the Run view by clicking on the Run and Debug button.
When no configuration has been set, you’ll be given a list of debugging options. Here, you can select the appropriate option to quickly debug your code.
Two common options are to use the Python File configuration to run the currently open Python file or to use the Attach using Process ID configuration to attach the debugger to a process that is already running.
For information about creating and using debugging configurations, see the Initialize configurations and Additional configurations sections. Once a configuration is added, it can be selected from the dropdown list and started using the Start Debugging button (F5).
Breakpoints and logpoints
The Python Debugger extension supports breakpoints and logpoints for debugging code. For a short walkthrough of basic debugging and using breakpoints, see Tutorial – Configure and run the debugger.
Conditional breakpoints
Breakpoints can also be set to trigger based on expressions, hit counts, or a combination of both. The Python Debugger extension supports hit counts that are integers, in addition to integers preceded by the ==, >, >=, <, <=, and % operators. For example, you could set a breakpoint to trigger after five occurrences by setting a hit count of
>5
For more information, see conditional breakpoints in the main VS Code debugging article.
Invoking a breakpoint in code
In your Python code, you can call
debugpy.breakpoint()
at any point where you want to pause the debugger during a debugging session.
Breakpoint validation
The Python Debugger extension automatically detects breakpoints that are set on non-executable lines, such as
pass
statements or the middle of a multiline statement. In such cases, running the debugger moves the breakpoint to the nearest valid line to ensure that code execution stops at that point.
Enhance completions with AI
GitHub Copilot is an AI-powered code completion tool that helps you write code faster and smarter. You can use the GitHub Copilot extension in VS Code to generate code, or to learn from the code it generates.
GitHub Copilot provides suggestions for languages beyond Python and a wide variety of frameworks, including JavaScript, TypeScript, Ruby, Go, C# and C++.
You can learn more about how to get started with Copilot in the Copilot documentation.
Install Python and the Python extension
The tutorial guides you through installing Python and using the extension. You must install a Python interpreter yourself separately from the extension. For a quick install, use Python from python.org and install the extension from the VS Code Marketplace.
Note: To help get you started with Python development, you can use the Python profile template that includes useful extensions, settings, and Python code snippets.
Once you have a version of Python installed, select it using the Python: Select Interpreter command. If VS Code doesn’t automatically locate the interpreter you’re looking for, refer to Environments – Manually specify an interpreter.
You can configure the Python extension through settings. Learn more in the Python Settings reference.
Windows Subsystem for Linux: If you are on Windows, WSL is a great way to do Python development. You can run Linux distributions on Windows and Python is often already installed. When coupled with the WSL extension, you get full VS Code editing and debugging support while running in the context of WSL. To learn more, go to Developing in WSL or try the Working in WSL tutorial.
Creating environments
Using the Create Environment command
To create local environments in VS Code using virtual environments or Anaconda, you can follow these steps: open the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), search for the Python: Create Environment command, and select it.
The command presents a list of environment types: Venv or Conda.
If you are creating an environment using Venv, the command presents a list of interpreters that can be used as a base for the new virtual environment.
If you are creating an environment using Conda, the command presents a list of Python versions that can be used for your project.
After selecting the desired interpreter or Python version, a notification will show the progress of the environment creation and the environment folder will appear in your workspace.
Note: The command will also install necessary packages outlined in a requirements/dependencies file, such as
requirements.txt
,
pyproject.toml
, or
environment.yml
, located in the project folder. It will also add a
.gitignore
file to the virtual environment to help prevent you from accidentally committing the virtual environment to source control.
Create a virtual environment in the terminal
If you choose to create a virtual environment manually, use the following command (where “.venv” is the name of the environment folder):
# macOS/Linux # You may need to run `sudo apt-get install python3-venv` first on Debian-based OSs python3 -m venv .venv # Windows # You can also use `py -3 -m venv .venv` python -m venv .venv
Note: To learn more about the
venv
module, read Creation of virtual environments on Python.org.
When you create a new virtual environment, a prompt will be displayed in VS Code to allow you to select it for the workspace.
Tip: Make sure to update your source control settings to prevent accidentally committing your virtual environment (in for example
.gitignore
). Since virtual environments are not portable, it typically does not make sense to commit them for others to use.
Create a conda environment in the terminal
The Python extension automatically detects existing conda environments. We recommend you install a Python interpreter into your conda environment, otherwise one will be installed for you after you select the environment. For example, the following command creates a conda environment named
env-01
with a Python 3.9 interpreter and several libraries:
conda create -n env-01 python=3.9 scipy=0.15.0 numpy
Note: For more information on the conda command line, you can read Conda environments.
Additional notes:
-
If you create a new conda environment while VS Code is running, use the refresh icon on the top right of the Python: Select Interpreter window; otherwise you may not find the environment there.
-
To ensure the environment is properly set up from a shell perspective, use an Anaconda prompt and activate the desired environment. Then, you can launch VS Code by entering the
code .
command. Once VS Code is open, you can select the interpreter either by using the Command Palette or by clicking on the status bar. -
Although the Python extension for VS Code doesn’t currently have direct integration with conda
environment.yml
files, VS Code itself is a great YAML editor. -
Conda environments can’t be automatically activated in the VS Code Integrated Terminal if the default shell is set to PowerShell. To change the shell, see Integrated terminal – Terminal profiles.
-
You can manually specify the path to the
conda
executable to use for activation (version 4.4+). To do so, open the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) and run Preferences: Open User Settings. Then set
python.condaPath
, which is in the Python extension section of User Settings, with the appropriate path.
Install a Python interpreter
Along with the Python extension, you need to install a Python interpreter. Which interpreter you use is dependent on your specific needs, but some guidance is provided below.
Windows
Install Python from python.org. Use the Download Python button that appears first on the page to download the latest version.
Note: If you don’t have admin access, an additional option for installing Python on Windows is to use the Microsoft Store. The Microsoft Store provides installs of supported Python versions.
For additional information about using Python on Windows, see Using Python on Windows at Python.org
macOS
The system install of Python on macOS is not supported. Instead, a package management system like Homebrew is recommended. To install Python using Homebrew on macOS use
brew install python3
at the Terminal prompt.
Note: On macOS, make sure the location of your VS Code installation is included in your PATH environment variable. See these setup instructions for more information.
Linux
The built-in Python 3 installation on Linux works well, but to install other Python packages you must install
pip
with get-pip.py.
Other options
-
Data Science: If your primary purpose for using Python is Data Science, then you might consider a download from Anaconda. Anaconda provides not just a Python interpreter, but many useful libraries and tools for data science.
-
Windows Subsystem for Linux: If you are working on Windows and want a Linux environment for working with Python, the Windows Subsystem for Linux (WSL) is an option for you. If you choose this option, you’ll also want to install the WSL extension. For more information about using WSL with VS Code, see VS Code Remote Development or try the Working in WSL tutorial, which will walk you through setting up WSL, installing Python, and creating a Hello World application running in WSL.
Note: To verify that you’ve installed Python successfully on your machine, run one of the following commands (depending on your operating system):
Linux/macOS: open a Terminal Window and type the following command:
python3 --version
Windows: open a command prompt and run the following command:
py -3 --version
If the installation was successful, the output window should show the version of Python that you installed. Alternatively, you can use the
py -0
command in the VS Code integrated terminal to view the versions of python installed on your machine. The default interpreter is identified by an asterisk (*).
Installing and Configuring Visual Studio Code for Python Development
Installing Visual Studio Code is very accessible on any platform. Full instructions for Windows, Mac, and Linux are available, and the editor is updated monthly with new features and bug fixes. You can find everything at the Visual Studio Code website:
In case you were wondering, Visual Studio Code (or VS Code for short) shares almost nothing other than a name with its larger Windows-based namesake, Visual Studio.
Note: To learn how to set up VS Code as part of a full Python coding environment on a Windows machine, check out this comprehensive guide.
Visual Studio Code has built-in support for multiple languages and an extension model with a rich ecosystem of support for others. VS Code is updated monthly, and you can keep up to date at the Microsoft Python blog. Microsoft even makes the VS Code GitHub repo available for anyone to clone and contribute. (Cue the PR flood.)
The VS Code UI is well documented, so I won’t rehash it here:
Extensions for Python Development
As stated above, VS Code supports development in multiple programming languages through a well-documented extension model. The Python extension enables Python development in Visual Studio Code, with the following features:
- Support for Python 3.4 and higher, as well as Python 2.7
- Code completion with IntelliSense
- Linting
- Debugging support
- Code snippets
- Unit testing support
- Automatic use of conda and virtual environments
- Code editing in Jupyter environments and Jupyter Notebooks
Visual Studio Code extensions cover more than just programming language capabilities:
-
Keymaps allow users already familiar with Atom, Sublime Text, Emacs, Vim, PyCharm, or other environments to feel at home.
-
Themes customize the UI whether you like coding in the light, dark, or something more colorful.
-
Language packs provide a localized experience.
Here are some other extensions and settings I find useful:
-
GitLens provides tons of useful Git features directly in your editing window, including blame annotations and repository exploration features.
-
Auto save is easily turned on by selecting
File, Auto Save
from the menu. The default delay time is 1000 milliseconds, which is also configurable. -
Settings Sync allows you to synchronize your VS Code settings across different installations using GitHub. If you work on different machines, this helps keep your environment consistent across them.
-
Docker lets you quickly and easily work with Docker, helping author
Dockerfile
and
docker-compose.yml
, package and deploy your projects, and even generate the proper Docker files for your project.
Of course, you may discover other useful extensions as you use VS Code. Please share your discoveries and settings in the comments!
Discovering and installing new extensions and themes is accessible by clicking on the Extensions icon on the Activity Bar. You can search for extensions using keywords, sort the results numerous ways, and install extensions quickly and easily. For this article, install the Python extension by typing
python
in the Extensions item on the Activity Bar, and clicking Install:
You can find and install any of the extensions mentioned above in the same manner.
Visual Studio Code Configuration Files
One important thing to mention is that Visual Studio Code is highly configurable through user and workspace settings.
User settings are global across all Visual Studio Code instances, while workspace settings are local to the specific folder or project workspace. Workspace settings give VS Code tons of flexibility, and I call out workspace settings throughout this article. Workspace settings are stored as
.json
files in a folder local to the project workspace called
.vscode
.
Debugging Support
Even though VS Code is a code editor, debugging Python directly within VS Code is possible. VS Code offers many of the features you would expect from a good code debugger, including:
- Automatic variable tracking
- Watch expressions
- Breakpoints
- Call stack inspection
You can see them all as part of the Debug view on the Activity Bar:
The debugger can control Python apps running in the built-in terminal or an external terminal instance. It can attach to an already running Python instances, and can even debug Django and Flask apps.
Debugging code in a single Python file is as simple as starting the debugger using F5. You use F10 and F11 to step over and into functions respectively, and Shift+F5 to exit the debugger. Breakpoints are set using F9, or using the mouse by clicking in the left margin in the editor window.
Before you start debugging more complicated projects, including Django or Flask applications, you need to setup and then select a debug configuration. Setting up the debug configuration is relatively straightforward. From the Debug view, select the Configuration drop-down, then Add Configuration, and select Python:
Visual Studio Code will create a debug configuration file under the current folder called
.vscode/launch.json
, which allows you to setup specific Python configurations as well as settings for debugging specific apps, like Django and Flask.
You can even perform remote debugging, and debug Jinja and Django templates. Close the
launch.json
file in the editor and select the proper configuration for your application from the Configuration drop-down.
Run Python code
Click the Run Python File in Terminal play button in the top-right side of the editor.
The button opens a terminal panel in which your Python interpreter is automatically activated, then runs
python3 hello.py
(macOS/Linux) or
python hello.py
(Windows):
There are three other ways you can run Python code within VS Code:
-
Right-click anywhere in the editor window and select Run > Python File in Terminal (which saves the file automatically):
-
Select one or more lines, then press Shift+Enter or right-click and select Run Selection/Line in Python Terminal. This command is convenient for testing just a part of a file.
-
From the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), select the Python: Start REPL command to open a REPL terminal for the currently selected Python interpreter. In the REPL, you can then enter and run lines of code one at a time.
Congrats, you just ran your first Python code in Visual Studio Code!
Getting Started with Python in VS Code
In this tutorial, you will learn how to use Python 3 in Visual Studio Code to create, run, and debug a Python “Roll a dice” application, work with virtual environments, use packages, and more! By using the Python extension, you turn VS Code into a great, lightweight Python editor.
If you are new to programming, check out the Visual Studio Code for Education – Introduction to Python course. This course offers a comprehensive introduction to Python, featuring structured modules in a ready-to-code browser-based development environment.
To gain a deeper understanding of the Python language, you can explore any of the programming tutorials listed on python.org within the context of VS Code.
For a Data Science focused tutorial with Python, check out our Data Science section.
Next steps
- Python environments – Control which Python interpreter is used for editing and debugging.
- Testing – Configure test environments and discover, run, and debug tests.
- Settings reference – Explore the full range of Python-related settings in VS Code.
- General debugging – Learn about the debugging features of VS Code.
Install and use packages
Let’s build upon the previous example by using packages.
In Python, packages are how you obtain any number of useful code libraries, typically from PyPI, that provide additional functionality to your program. For this example, you use the
numpy
package to generate a random number.
Return to the Explorer view (the top-most icon on the left side, which shows files), open
hello.py
, and paste in the following source code:
import numpy as np msg = "Roll a dice" print(msg) print(np.random.randint(1,9))
Tip: If you enter the above code by hand, you may find that auto-completions change the names after the
as
keywords when you press Enter at the end of a line. To avoid this, type a space, then Enter.
Next, run the file in the debugger using the “Python: Current file” configuration as described in the last section.
You should see the message, “ModuleNotFoundError: No module named ‘numpy'”. This message indicates that the required package isn’t available in your interpreter. If you’re using an Anaconda distribution or have previously installed the
numpy
package you may not see this message.
To install the
numpy
package, stop the debugger and use the Command Palette to run Terminal: Create New Terminal (⌃⇧` (Windows, Linux Ctrl+Shift+`)). This command opens a command prompt for your selected interpreter.
To install the required packages in your virtual environment, enter the following commands as appropriate for your operating system:
-
Install the packages
# Don't use with Anaconda distributions because they include matplotlib already. # macOS python3 -m pip install numpy # Windows (may require elevation) py -m pip install numpy # Linux (Debian) apt-get install python3-tk python3 -m pip install numpy
-
Now, rerun the program, with or without the debugger, to view the output!
Congrats on completing the Python tutorial! During the course of this tutorial, you learned how to create a Python project, create a virtual environment, run and debug your Python code, and install Python packages. Explore additional resources to learn how to get the most out of Python in Visual Studio Code!
Environments
The Python extension automatically detects Python interpreters that are installed in standard locations. It also detects conda environments as well as virtual environments in the workspace folder. See Configuring Python environments.
The current environment is shown on the right side of the VS Code Status Bar:
The Status Bar also indicates if no interpreter is selected:
The selected environment is used for IntelliSense, auto-completions, linting, formatting, and any other language-related feature. It is also activated when you run or debug Python in a terminal, or when you create a new terminal with the Terminal: Create New Terminal command.
To change the current interpreter, which includes switching to conda or virtual environments, select the interpreter name on the Status Bar or use the Python: Select Interpreter command.
VS Code prompts you with a list of detected environments as well as any you’ve added manually to your user settings (see Configuring Python environments).
Visual Studio Code Python for Data Science
Visual Studio Code allows users to simply run the data science code in Jupyter Notebook. We can run the cell and visualize the result within VSCode. It supports all kinds of programming languages and comes with built-in features to mimic the browser-based Jupyter notebook that we all love.
Learn more about Jupyter Notebooks by reading our How to use Jupyter Notebook tutorial.
To use the Jupyter notebook extension, we need to first install a Jupyter notebook.
pip install jupyterlab
Or
pip install notebook
Note: Jupyter Notebook and Jupyter Lab come with Anaconda Distribution, so we don’t have to install anything.
Install Jupyter Extension
After that, install the Jupyter extension from the Visual Studio marketplace.
To create a Jupyter notebook file, we can either create a new file with .ipynb extension or access the command palette (Ctrl+Shift+P) and select Jupyter: Create New Jupyter Notebook.
Pick the Ipython Kernel
To initialize the Jupyter server, we need to select the kernel by clicking on the kernel picker in the top right of the notebook, as shown in the image.
Note: By default, Anaconda comes with Python version 3.9.13. You can download the latest version of Python 3.11, but it won’t support all packages.
Run the Jupyter cell
Write a print expression to display “Hello World” and press the run button.
Add another cell
You can use the B key or click on + Code to add a new cell and run the cell with Ctrl + ⤶ Enter. You can learn about Jupyter keyboard shortcuts on defkey.
For R language users, we have got a Notebooks for R tutorial. You will learn to use R in a Jupyter Notebook and useful features.
Note: if you are looking for a hassle-free way of using Jupyter Notebook, then try DataCamp Workspace. It comes with essential Python libraries, a pre-build environment, and it supports various database integration.
Editing an Existing Python Project
In the Sieve of Eratosthenes example, you created a single Python file. That’s great as an example, but many times, you’ll create larger projects and work on them over a longer period of time. A typical new project work flow might look like this:
- Create a folder to hold the project (which may include a new GitHub project)
- Change to the new folder
-
Create the initial Python code using the command
code filename.py
Using Visual Studio Code on a Python project (as opposed to a single Python file) opens up tons more functionality that lets VS Code truly shine. Let’s take a look at how it works with a larger project.
Late in the previous millennium, when I was a much younger programmer, I wrote a calculator program that parsed equations written in infix notation, using an adaptation of Edsger Dijkstra’s shunting yard algorithm.
To demonstrate the project-focused features of Visual Studio Code, I began recreating the shunting yard algorithm as an equation evaluation library in Python. To continue following along, feel free to clone the repo locally.
Once the folder is created locally, you can open the entire folder in VS Code quickly. My preferred method (as mentioned above) is modified as follows, since I already have the folder and basic files created:
cd /path/to/project code .
VS Code understands, and will use, any virtualenv, pipenv, or conda environments it sees when opened this way. You don’t even need to start the virtual environment first! You can even open a folder from the UI, using File, Open Folder from the menu, Ctrl+K, Ctrl+O from the keyboard, or File:Open Folder from the Command Palette.
For my equation eval library project, here’s what I see:
When Visual Studio Code opens the folder, it also opens the files you last had opened. (This is configurable.) You can open, edit, run, and debug any file listed. The Explorer view in the Activity Bar on the left gives you a view of all the files in the folder and shows how many unsaved files exist in the current set of tabs.
How to create and open a Python project or file
If you have an existing Python project you wish to work on in VS Code, you can begin by opening your folder or file from the VS Code Welcome page or File Explorer view, or by selecting File > Open Folder (Ctrl+K Ctrl+O) or File > Open File (⌘O (Windows, Linux Ctrl+O)).
You can create a new Python file by selecting New File on the VS Code Welcome page and then selecting Python file, or by navigating to File > New File ().
Tip: If you already have a workspace folder open in VS Code, you can add new files or folders directly into your existing project. You can create new folders and files by using the corresponding New Folder or New File icons on the top level folder in the File Explorer view.
Start VS Code in a workspace folder
By starting VS Code in a folder, that folder becomes your “workspace”.
Using a command prompt or terminal, create an empty folder called “hello”, navigate into it, and open VS Code (
code
) in that folder () by entering the following commands:
mkdir hello cd hello code .
Note: If you’re using an Anaconda distribution, be sure to use an Anaconda command prompt.
Alternately, you can create a folder through the operating system UI, then use VS Code’s File > Open Folder to open the project folder.
Testing Support
VS Code can automatically recognize existing Python tests written in the
unittest
framework, or the
pytest
or
Nose
frameworks if those frameworks are installed in the current environment. I have a unit test written in
unittest
for the equation eval library, which you can use for this example.
To run your existing unit tests, from any Python file in the project, right-click and select Run Current Unit Test File. You’ll be prompted to specify the test framework, where in the project to search for tests, and the filename pattern your tests utilize.
All of these are saved as workspace settings in your local
.vscode/settings.json
file and can be modified there. For this equation project, you select
unittest
, the current folder, and the pattern
*_test.py
.
Once the test framework is set up and the tests have been discovered, you can run all your tests by clicking Run Tests on the Status Bar and selecting an option from the Command Palette:
You can even run individual tests by opening the test file in VS Code, clicking Run Tests on the Status Bar, and selecting the Run Unit Test Method… and the specific test to run. This makes it trivial to address individual test failures and re-run only failed tests, which is a huge time-saver! Test results are shown in the Output pane under Python Test Log.
Next steps
- Python Hello World tutorial – Get started with Python in VS Code.
- Editing Python – Learn about auto-completion, formatting, and refactoring for Python.
- Basic Editing – Learn about the powerful VS Code editor.
- Code Navigation – Move quickly through your source code.
- Django tutorial
- Flask tutorial
Getting Started with Python in VS Code
In this tutorial, you will learn how to use Python 3 in Visual Studio Code to create, run, and debug a Python “Roll a dice” application, work with virtual environments, use packages, and more! By using the Python extension, you turn VS Code into a great, lightweight Python editor.
If you are new to programming, check out the Visual Studio Code for Education – Introduction to Python course. This course offers a comprehensive introduction to Python, featuring structured modules in a ready-to-code browser-based development environment.
To gain a deeper understanding of the Python language, you can explore any of the programming tutorials listed on python.org within the context of VS Code.
For a Data Science focused tutorial with Python, check out our Data Science section.
Code Actions
Code Actions (also known as Quick Fixes) are provided to help fix issues when there are warnings in your code. These helpful hints are displayed in the editor left margin as a lightbulb (💡). Select the light bulb to display Code Action options. These Code Action can come from extensions such as Python, Pylance, or VS Code itself. For more information about Code Actions, see Python Quick Fixes.
Keywords searched by users: visual studio code python setup
See more here: kientrucannam.vn
See more: https://kientrucannam.vn/vn/