This script allow you to add alias commands on each python install.
NOTE : If this script find some python.exe and not works, it means that this python.exe is not a full Python installation, but only a launcher or an embedded runtime that is designed to run inside a virtual environment or a complete Python directory structure.

I used artificial intelligence, tested and works well, lets see the source code:
import sys
import os
import json
import subprocess
from PyQt6.QtWidgets import (
QApplication, QWidget, QVBoxLayout, QPushButton,
QTableWidget, QTableWidgetItem, QFileDialog, QMessageBox
)
from PyQt6.QtCore import Qt
CONFIG_FILE = "python_aliases.json"
ALIAS_DIR = os.path.join(os.environ["LOCALAPPDATA"], "Microsoft", "WindowsApps")
# ------------------------------
# Persistență JSON
# ------------------------------
def load_aliases():
if os.path.isfile(CONFIG_FILE):
try:
with open(CONFIG_FILE, "r") as f:
return json.load(f)
except:
return []
return []
def save_aliases(data):
with open(CONFIG_FILE, "w") as f:
json.dump(data, f, indent=4)
# ------------------------------
# Detectare Python
# ------------------------------
def detect_where_python():
"""Detectează instalările Python folosind 'where python'."""
found = []
try:
out = subprocess.check_output(["where", "python"], stderr=subprocess.STDOUT)
lines = out.decode().splitlines()
for line in lines:
if line.lower().endswith("python.exe"):
found.append(line.strip())
except:
pass
return found
def search_python_in_folder_recursive(folder):
"""Caută python.exe în folder și în toate subfolderele recursiv."""
found = []
for root, dirs, files in os.walk(folder):
if "python.exe" in files:
found.append(os.path.join(root, "python.exe"))
return found
# ------------------------------
# Detectare aliasuri existente
# ------------------------------
def detect_existing_aliases():
"""Caută aliasuri existente (*.cmd) în WindowsApps."""
aliases = {}
if not os.path.isdir(ALIAS_DIR):
return aliases
for file in os.listdir(ALIAS_DIR):
if file.endswith(".cmd"):
alias_name = file[:-4]
cmd_path = os.path.join(ALIAS_DIR, file)
try:
with open(cmd_path, "r") as f:
line = f.readline().strip()
if line.startswith("@\"") and line.endswith("%*"):
python_path = line[2:-3].strip('"')
aliases[alias_name] = python_path
except:
pass
return aliases
# ------------------------------
# Creare alias
# ------------------------------
def create_alias(alias_name, python_path):
"""Creează un fișier .cmd în WindowsApps pentru alias."""
cmd_path = os.path.join(ALIAS_DIR, alias_name + ".cmd")
try:
with open(cmd_path, "w") as f:
f.write(f'@"{python_path}" %*\n')
return True
except Exception as e:
print("Eroare alias:", e)
return False
# ------------------------------
# Interfață PyQt6
# ------------------------------
class PythonAliasManager(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Python Alias Manager – PyQt6")
self.resize(800, 550)
layout = QVBoxLayout(self)
self.table = QTableWidget(0, 2)
self.table.setHorizontalHeaderLabels(["Path Python", "Alias (editabil)"])
self.table.horizontalHeader().setStretchLastSection(True)
layout.addWidget(self.table)
btn_detect = QPushButton("Detectează instalări (where python)")
btn_detect.clicked.connect(self.detect_where)
layout.addWidget(btn_detect)
btn_add_folder = QPushButton("Adaugă folder custom (recursiv)")
btn_add_folder.clicked.connect(self.add_folder)
layout.addWidget(btn_add_folder)
btn_search_folder = QPushButton("Caută python.exe recursiv în folder selectat")
btn_search_folder.clicked.connect(self.search_folder)
layout.addWidget(btn_search_folder)
btn_aliases = QPushButton("Afișează aliasuri existente")
btn_aliases.clicked.connect(self.show_existing_aliases)
layout.addWidget(btn_aliases)
btn_apply = QPushButton("Aplică aliasuri în Windows")
btn_apply.clicked.connect(self.apply_aliases)
layout.addWidget(btn_apply)
self.data = load_aliases()
self.refresh_table()
# --------------------------
# Tabel
# --------------------------
def refresh_table(self):
self.table.setRowCount(0)
for entry in self.data:
row = self.table.rowCount()
self.table.insertRow(row)
self.table.setItem(row, 0, QTableWidgetItem(entry["path"]))
alias_item = QTableWidgetItem(entry["alias"])
alias_item.setFlags(alias_item.flags() | Qt.ItemFlag.ItemIsEditable)
self.table.setItem(row, 1, alias_item)
# --------------------------
# Detectare instalări
# --------------------------
def detect_where(self):
paths = detect_where_python()
for p in paths:
self.add_entry(p)
self.refresh_table()
save_aliases(self.data)
def add_folder(self):
folder = QFileDialog.getExistingDirectory(self, "Selectează folder Python")
if folder:
paths = search_python_in_folder_recursive(folder)
for p in paths:
self.add_entry(p)
self.refresh_table()
save_aliases(self.data)
def search_folder(self):
folder = QFileDialog.getExistingDirectory(self, "Selectează folder pentru scanare")
if folder:
paths = search_python_in_folder_recursive(folder)
for p in paths:
self.add_entry(p)
self.refresh_table()
save_aliases(self.data)
# --------------------------
# Aliasuri existente
# --------------------------
def show_existing_aliases(self):
aliases = detect_existing_aliases()
if not aliases:
QMessageBox.information(self, "Aliasuri", "Nu există aliasuri în WindowsApps.")
return
msg = "\n".join([f"{a} → {p}" for a, p in aliases.items()])
QMessageBox.information(self, "Aliasuri existente", msg)
# --------------------------
# Adăugare în listă
# --------------------------
def add_entry(self, path):
if not any(e["path"] == path for e in self.data):
alias = "python_" + os.path.basename(os.path.dirname(path)).replace(".", "_")
self.data.append({"path": path, "alias": alias})
# --------------------------
# Aplicare aliasuri
# --------------------------
def apply_aliases(self):
# actualizează aliasurile din tabel
for row in range(self.table.rowCount()):
self.data[row]["path"] = self.table.item(row, 0).text()
self.data[row]["alias"] = self.table.item(row, 1).text()
save_aliases(self.data)
ok = 0
for entry in self.data:
if create_alias(entry["alias"], entry["path"]):
ok += 1
QMessageBox.information(
self,
"Aliasuri aplicate",
f"Aliasuri create: {ok}\nAcum poți folosi comenzile în CMD/PowerShell."
)
# ------------------------------
# Main
# ------------------------------
if __name__ == "__main__":
app = QApplication(sys.argv)
win = PythonAliasManager()
win.show()
sys.exit(app.exec())