
Python VSCode Extension
Silent install package for Python VSCode Extension
2025.10.1-24
- package: tis-vscode-python
- name: Python VSCode Extension
- version: 2025.10.1-24
- categories: Development,Extension
- maintainer: WAPT Team,Tranquil IT,Jimmy PELÉ
- editor: Microsoft
- licence: opensource_free,cpe:/a:mit:x11_license
- target_os: all
- architecture: all
- signature_date:
- size: 10.96 Mo
- homepage : https://github.com/Microsoft/vscode-python
- depends:
package : tis-vscode-python
version : 2025.10.1-24
architecture : all
section : base
priority : optional
name : Python VSCode Extension
categories : Development,Extension
maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ
description : Python VSCode Extension
depends : tis-vscode
conflicts :
maturity : PROD
locale :
target_os : all
min_wapt_version : 2.1
sources : https://marketplace.visualstudio.com/items/ms-python.python
installed_size :
impacted_process :
description_fr :
description_pl :
description_de :
description_es :
description_pt :
description_it :
description_nl :
description_ru :
audit_schedule :
editor : Microsoft
keywords : vscode,extension,python
licence : opensource_free,cpe:/a:mit:x11_license
homepage : https://github.com/Microsoft/vscode-python
package_uuid : 296d7ffd-eecb-455c-815c-e1d84dab6eb4
valid_from :
valid_until :
forced_install_on :
changelog : https://marketplace.visualstudio.com/items/ms-python.python/changelog
min_os_version :
max_os_version :
icon_sha256sum : 2a548f2dd75093de32da7aff8e0553f1903ecf02f22664d95eb01d4aaa28a878
signer : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature_date : 2025-07-27T01:12:31.000000
signed_attributes : package,version,architecture,section,priority,name,categories,maintainer,description,depends,conflicts,maturity,locale,target_os,min_wapt_version,sources,installed_size,impacted_process,description_fr,description_pl,description_de,description_es,description_pt,description_it,description_nl,description_ru,audit_schedule,editor,keywords,licence,homepage,package_uuid,valid_from,valid_until,forced_install_on,changelog,min_os_version,max_os_version,icon_sha256sum,signer,signer_fingerprint,signature_date,signed_attributes
signature : S9ZoafoSy3gzOjLHcEi4cl3+CZdsUrc3sGUDm9l6LqPPY9rGBnwXd/FF/yKoZOXslbCd3Yqwci97URkybNY9QzzUKj5DUzlb3M1klgEDcpAXS3K175R4j4ONOz0kmD74SAxbioyS64zan1Og2vCgkcojYZjmkGUe3o5ISMr5aOoGu3+Wsonf0no9lpbD5RCvZKyOUU4D5aSXSTbePlmn7McrW3py6d29p/mijxN5I4BV328Yqkw6RaG9Gl9BmswmgXL0QVbJ6KDTMZJ7etzAtBNk7EdF7f7PMaH6YdoqP04q+EaMo0zhUMeSs8Ot/foYRzoXfnUBkBXejAAfS7mkOg==
# -*- coding: utf-8 -*-
from setuphelpers import *
ext_uid_name = "ms-python.python"
def install():
# Initializing variables
package_version = control.get_software_version()
ext_file_name = glob.glob("*%s*.vsix" % ext_uid_name)[0]
if get_os_name() == "Windows":
app_dir = makepath(programfiles, "Microsoft VS Code")
app_bin_path = makepath(app_dir, "bin", "code")
elif get_os_name() == "Linux":
app_dir = makepath("/", "usr", "share", "code")
app_bin_path = makepath(app_dir, "bin", "code")
elif get_os_name() == "Darwin":
app_dir = makepath("/", "Applications", "Visual Studio Code.app")
app_bin_path = makepath(app_dir, "Contents", "Resources", "app", "bin", "code")
ext_path = makepath(app_dir, ext_file_name)
# Removing old extensions from app_dir
for ext in glob.glob(makepath(app_dir, "*%s*.vsix" % ext_uid_name)) + [makepath(app_dir, "ms-python-release.vsix")]:
print("Removing: %s" % ext)
remove_file(ext)
# Copying extension to app_dir
print("Copying: %s to: %s" % (ext_file_name, app_dir))
filecopyto(ext_file_name, app_dir)
# Disable File Validation Warning
if get_os_name() == "Windows":
set_environ_variable("PYDEVD_DISABLE_FILE_VALIDATION", "1")
def session_setup():
# Initializing variables
package_version = control.get_software_version()
if get_os_name() == "Windows":
app_dir = makepath(programfiles, "Microsoft VS Code")
app_bin_path = makepath(app_dir, "bin", "code")
elif get_os_name() == "Linux":
app_dir = makepath("/", "usr", "share", "code")
app_bin_path = makepath(app_dir, "bin", "code")
elif get_os_name() == "Darwin":
app_dir = makepath("/", "Applications", "Visual Studio Code.app")
app_bin_path = makepath(app_dir, "Contents", "Resources", "app", "bin", "code")
ext_path = glob.glob(makepath(app_dir, "*%s*.vsix" % ext_uid_name))[0]
# Installing extension in user env
print("Installing: %s extension in user env" % (ext_path))
vsix_cmd = f'"{app_bin_path}" --install-extension "{ext_path}"'
#if force or "2021.12.1559732655" in ext_path:
# vsix_cmd += " --force"
result = run_notfatal(vsix_cmd) # code extension always return exit status 0 for now
print(result)
# if "Failed Installing Extensions" in result and not force:
#if "Failed Installing Extensions" in result or "A newer version of extension" in result and not force:
# print("Unable to install extension with: %s" % ext_path)
# print("Force install: %s extension in user env" % (ext_uid_name))
# # result_force = run_notfatal('"%s" --install-extension "%s" --force' % (app_bin_path, ext_uid_name))
# result_force = run_notfatal('"%s" --install-extension "%s" --force' % (app_bin_path, ext_uid_name + "@2021.12.1559732655"))
# print(result_force)
# if "Failed Installing Extensions" in result_force:
# print("Unable to force install %s extension" % ext_uid_name)
# # Please disable Jupyter extension manually instead of this code since it can not be done silently
# if not WAPT.is_installed("tis-vscode-jupyter"):
# # Disable Jupyter just once since it run VSCode...
# if not registry_readstring(HKEY_CURRENT_USER, r"SOFTWARE\WAPT\Code", "DisableJupyterOnce") == "Done":
# run_notfatal('"%s" --disable-extension "ms-toolsai.jupyter"' % (app_bin_path))
# registry_setstring(HKEY_CURRENT_USER, r"SOFTWARE\WAPT\Code", "DisableJupyterOnce", "Done")
def uninstall():
# Initializing variables
package_version = control.get_software_version()
if get_os_name() == "Windows":
app_dir = makepath(programfiles, "Microsoft VS Code")
app_bin_path = makepath(app_dir, "bin", "code")
elif get_os_name() == "Linux":
app_dir = makepath("/", "usr", "share", "code")
app_bin_path = makepath(app_dir, "bin", "code")
elif get_os_name() == "Darwin":
app_dir = makepath("/", "Applications", "Visual Studio Code.app")
app_bin_path = makepath(app_dir, "Contents", "Resources", "app", "bin", "code")
# Removing extensions from app_dir
for ext in glob.glob(makepath(app_dir, "*%s*.vsix" % ext_uid_name)):
print("Removing: %s" % ext)
remove_file(ext)
# Removing extension from user profiles
killalltasks(["Code", "code"])
print(remove_tree_for_all_users(makepath(".vscode", "extensions", "%s-*" % ext_uid_name)))
def remove_tree_for_all_users(user_folder_relative_path, ignored_users=None, ignore_system_users=True):
r"""Remove a specific folder or folders for all user's profiles
Args:
user_folder_relative_path (str): relative path to user folder, glob patterns can be used
ignored_users (str or list of str): ignore specified users
ignore_system_users (bool): ignore default, public, all users, etc. True by default
Returns:
list: list of deleted folders
>>> print(remove_tree_for_all_users(makepath(".vscode", "extensions", "ms-toolsai.jupyter-*")))
['C:\\Users\\username\\.vscode\\extensions\\ms-toolsai.jupyter-2022.2.1001817079', 'C:\\Users\\username\\.vscode\\extensions\\ms-toolsai.jupyter-keymap-1.0.0', 'C:\\Users\\username\\.vscode\\extensions\\ms-toolsai.jupyter-renderers-1.0.6']
>>> print(remove_tree_for_all_users(makepath(".vscode", "extensions", "ms-toolsai.jupyter-")))
[]
>>> print(remove_tree_for_all_users(makepath(".vscode", "extensions", "ms-toolsai.jupyter-[a-z]*")))
['C:\\Users\\username\\.vscode\\extensions\\ms-toolsai.jupyter-keymap-1.0.0', 'C:\\Users\\username\\.vscode\\extensions\\ms-toolsai.jupyter-renderers-1.0.6']
>>> print(remove_tree_for_all_users(makepath(".vscode", "extensions", "ms-toolsai.jupyter-1.0.0")))
['/home/username/.vscode/extensions/ms-toolsai.jupyter-keymap-1.0.0']
.. versionadded:: 2.3
"""
system_users_list = ["All Users", "Default", "Default User", "Public", "Shared"]
if ignored_users is None:
ignored_users = []
if type(ignored_users) != list:
ignored_users = [ignored_users]
deleted_folders = []
skipped_users = []
if ignored_users:
skipped_users.extend(ignored_users)
if ignore_system_users:
skipped_users.extend(system_users_list)
if get_os_name() == "Windows":
users_dir = makepath(systemdrive, "Users")
elif get_os_name() == "Linux":
users_dir = "/home"
elif get_os_name() == "Darwin":
users_dir = "/Users"
for user_profile in glob.glob("%s/*/" % users_dir):
for ignored_user in ignored_users:
if user_profile.rstrip(os.path.sep).split(os.path.sep)[-1] == ignored_user:
continue
for user_folder_to_delete in glob.glob(r"%s" % makepath(user_profile, user_folder_relative_path)):
deleted_folders.append(user_folder_to_delete)
remove_tree(user_folder_to_delete)
return deleted_folders
# -*- coding: utf-8 -*-
from setuphelpers import *
import json
import requests
import time
ext_uid_name = "ms-python.python"
ext_publisher = ext_uid_name.split(".")[0]
def update_package():
# Declaring local variables
result = False
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
app_name = control.name
url = "https://marketplace.visualstudio.com/items?itemName=%s" % ext_uid_name
# Getting latest version from official sources
print("URL used is %s" % url)
for bs_search in bs_find_all(url, "script", "type", "application/json", proxies=proxies):
if bs_search.string.startswith("{"):
json_data = json.loads(bs_search.string)
break
api_url = "https://api.github.com/repos/microsoft/vscode-python/releases/latest"
json_load = json.loads(wgets(api_url, proxies=proxies))
version = json_load["tag_name"].split("-")[-1].replace("v", "")
download_url = "https://marketplace.visualstudio.com/_apis/public/gallery/publishers/%s/vsextensions/%s/%s/vspackage" % (
ext_publisher,
json_data["Resources"]["ExtensionName"],
version,
)
latest_bin = ext_uid_name + "-%s.vsix" % version
print("Latest %s version is: %s" % (app_name, version))
print("Download URL is: %s" % download_url)
# Downloading latest binaries
if not isfile(latest_bin):
print("Downloading: %s" % latest_bin)
content = requests.get(download_url, stream=True)
nb_wait = 0
max_wait = 3600
while str(content.status_code) == "429":
timewait = int(content.headers["Retry-After"])
print("Wait %s" % timewait)
nb_wait = nb_wait + timewait
if nb_wait > max_wait:
error("Max wait ...")
time.sleep(timewait)
content = requests.get(download_url, stream=True)
with open(latest_bin, "wb") as f:
for chunk in content.iter_content(chunk_size=1024 * 1024):
f.write(chunk)
# Changing version of the package
if Version(version) > Version(control.get_software_version()):
print("Software version updated (from: %s to: %s)" % (control.get_software_version(), Version(version)))
result = True
else:
print("Software version up-to-date (%s)" % Version(version))
control.version = "%s-%s" % (Version(version), control.version.split("-", 1)[-1])
# control.set_software_version(version)
control.save_control_to_wapt()
# Deleting outdated binaries
remove_outdated_binaries(version, "vsix")
# Validating or not update-package-sources
return result
38d056ab130f7bf7c481c12636a4e9959de36561d3dfcbe54c6e3571bc0c1dc3 : WAPT/certificate.crt
d687f25a17c0738a20df72663e63b91700cda6f97d4408702647b763916bf400 : WAPT/changelog.txt
3a88ed11572240bc6a5e93baa831deee04404f1fd968a6e4fa247d069787eff0 : WAPT/control
2a548f2dd75093de32da7aff8e0553f1903ecf02f22664d95eb01d4aaa28a878 : WAPT/icon.png
23b52748bffebfacfdf151cce916031f846f86ae1ade0a8c475f778c0febbe5f : luti.json
de177de3499fc67beaa1b948af1fd2d00f0ac07b582c5ba89eee76fc71867da9 : ms-python.python-2025.10.1.vsix
685ed45f23f51db201e20a8f618df7863062691ca2a88ded4eb1915bf76674b2 : setup.py
e8d2ff233f1cd261cfb38039fbbda186240526ea56ec48f0181ad06fc06a42cc : update_package.py
https://marketplace.visualstudio.com/items/ms-python.python/changelog
2023.8.0-23
===
Temporary using ms-python.python@2021.12.1559732655 until https://github.com/microsoft/vscode-python/issues/21265 is fixed
2023.8.0-21
===
Disable File Validation Warning with Set PYDEVD_DISABLE_FILE_VALIDATION=1 on Windows
2022.20.1-20
===
Switch to release version
Removes old file ms-python-release.vsix if found
Please disable Jupyter extension manually if you do not use it
Handle downgrade with `wapt-get session-setup tis-python -f`