Phân Biệt npm run, python, uv run & Smart Launcher
Phân Biệt npm run, python, uv run & Smart Launcher
Trong kỷ nguyên phát triển phần mềm đa nền tảng, một kỹ sư thường phải luân chuyển liên tục giữa các hệ sinh thái khác nhau: sáng viết code web với Node.js (JavaScript/TypeScript), chiều chạy mô hình máy học hoặc crawler với Python, và tối tối ưu hóa tốc độ môi trường bằng công cụ hiện đại viết bằng Rust như uv. Sự khác biệt giữa npm run <tên-script>, python <tệp.py> và uv run <tên-app> là gì? Làm thế nào để loại bỏ hoàn toàn việc phải ghi nhớ thủ công môi trường cho từng dự án bằng một Smart Launcher tự nhận diện và khởi chạy chỉ bằng chuột phải trên Windows 10/11? Bài viết này sẽ mổ xẻ toàn diện từ lý thuyết đến mã nguồn thực chiến từng bước.
•
Thời gian đọc: 20 phút chuyên sâu
•
Hệ điều hành áp dụng: Windows 10, Windows 11, PowerShell, Bash
Hình 1: Tối ưu hóa chu trình khởi chạy đa môi trường lập trình giúp tiết kiệm hàng trăm giờ thao tác dòng lệnh thủ công.
Tóm Tắt Điểm Cốt Lõi (Executive Summary)
• npm run: Dành cho Node.js, không chạy trực tiếp file mà kích hoạt các alias script được định nghĩa trước trong tệp cấu hình package.json.
• python: Trình thông dịch cổ điển, yêu cầu trỏ trực tiếp đến file mã nguồn vật lý (vd: main.py), phụ thuộc vào môi trường toàn cục (Global) hoặc môi trường ảo đã kích hoạt trước.
• uv run: Đột phá mới từ Astral viết bằng Rust, tốc độ nhanh gấp 10-100 lần pip, tự động nhận diện pyproject.toml, tự tạo virtualenv tạm thời và tự tải thư viện ngầm mà không cần kích hoạt thủ công.
• Giải pháp Smart Launcher: Sử dụng PowerShell kết hợp Windows Context Menu để tự động quét nội dung chứa khối if __name__ == '__main__':, tự phát hiện toàn bộ các bản Python cài trên máy (3.10, 3.12, 3.14), sắp xếp theo ngày sửa đổi mới nhất và cho phép chạy bằng 1 cú nhấp chuột phải.
- Phần 1: Bản Chất Và Cơ Chế Hoạt Động Của 3 Câu Lệnh CLI Phổ Biến
- Phần 2: Bảng So Sánh Toàn Diện: npm run vs python vs uv run
- Phần 3: Ý Tưởng Xây Dựng “Smart Launcher” Tự Động Hóa Không Cần Nhớ Lệnh
- Phần 4: Cơ Chế Nhận Diện Tệp Khởi Chạy Thông Minh (Quét Khối __main__ Thay Vì Tên Cố Định)
- Phần 5: Thuật Toán Quét Đa Phiên Bản Python Trên Hệ Thống Và Ghép Lệnh Kép
- Phần 6: 4 Lỗi Điển Hình Trên Windows 10/11 Khi Dùng PowerShell & Cách Khắc Phục Triệt Để
- Phần 7: Mã Nguồn Hoàn Chỉnh: Script PowerShell Chống Lỗi Font & Đơn Tệp
- Phần 8: Tích Hợp Trực Tiếp Vào Menu Chuột Phải Windows (Context Menu Registry)
- Phần 9: Câu Hỏi Thường Gặp (FAQ Tối Ưu Cho AI Overview & Trợ Lý Tìm Kiếm)
1. Bản Chất Và Cơ Chế Hoạt Động Của 3 Câu Lệnh CLI Phổ Biến
Cả ba lệnh npm run, python và uv run đều đóng vai trò là “người phát nổ” (entrypoint trigger) cho một chương trình, nhưng chúng hoạt động ở các lớp trừu tượng (abstraction layers) hoàn toàn khác nhau.
1. Lệnh npm run <tên-script> (Hệ Sinh Thái Node.js / JavaScript)
Trong thế giới Node.js, npm run không bao giờ trỏ trực tiếp đến tên file trên ổ đĩa. Nó thực chất là một trình quản lý tác vụ (Task Runner) thu nhỏ:
- Khi bạn gõ
npm run devhoặcnpm run build, trình quản lý gói npm sẽ đọc tệppackage.jsontại thư mục hiện hành, tìm đến đối tượng JSON"scripts"và thực thi chuỗi lệnh được gán cho từ khóa đó. - Nó tự động thêm thư mục
node_modules/.binvào biến môi trườngPATHcục bộ, cho phép bạn thực thi các công cụ như Vite, Next.js, Webpack hay TypeScript compiler mà không cần cài đặt chúng trên toàn hệ thống (Global).
2. Lệnh python <tên_file.py> (Hệ Sinh Thái Python Cổ Điển)
Đây là giao tiếp trực tiếp ở cấp độ trình thông dịch (Interpreter-level invocation):
- Bạn bắt buộc phải chỉ định rõ tên tệp tin hoặc đường dẫn vật lý (ví dụ:
python app.pyhoặcpython src/main.py). - Trình thông dịch sẽ nạp tệp đó vào bộ nhớ, biên dịch sang bytecode (tệp
.pyc) và chạy ngay lập tức. - Nhược điểm: Nó hoàn toàn “mù” về mặt phụ thuộc (dependencies). Nếu dự án yêu cầu thư viện
requestshayfastapimà bạn chưa kích hoạt môi trường ảo (venv) hoặc chưa chạy lệnhpip install, chương trình sẽ lập tức văng lỗiModuleNotFoundError.
3. Lệnh uv run <tên-app> (Hệ Sinh Thái Python Hiện Đại Từ Astral)
uv là dự án mã nguồn mở bùng nổ được viết hoàn toàn bằng ngôn ngữ Rust, ra đời nhằm thay thế toàn bộ chuỗi công cụ cồng kềnh (pip, pip-tools, virtualenv, poetry, pyenv):
- Khi chạy
uv run main.py,uvkiểm tra tính toàn vẹn của tệp khóauv.lockhoặcpyproject.toml. - Nếu môi trường ảo
.venvchưa tồn tại hoặc thiếu thư viện, nó sẽ tự động tạo và tải cài đặt các gói bánh xe (wheel) với tốc độ tức thì (nhờ cache toàn cục và cơ chế hardlink của hệ điều hành), sau đó mới thực thi mã nguồn. - Nhà phát triển không bao giờ phải gõ lệnh
source .venv/bin/activatehay.venvScriptsActivate.ps1một cách phiền toái nữa.
2. Bảng So Sánh Toàn Diện: npm run vs python vs uv run
| Tiêu Chí Kỹ Thuật | npm run <script> | python <file.py> | uv run <target> |
|---|---|---|---|
| Ngôn ngữ đích | JavaScript / TypeScript | Python (Cài đặt hệ thống) | Python (Được quản lý tự động) |
| Tệp cấu hình phụ thuộc | package.json |
Không bắt buộc (hoặc requirements.txt) |
pyproject.toml hoặc uv.lock |
| Quản lý môi trường ảo | Không (dùng node_modules) |
Phải tự tạo và kích hoạt thủ công | Tự động khởi tạo & cô lập ngầm |
| Tốc độ khởi động | Trung bình (phụ thuộc Node runtime) | Bình thường | Cực kỳ nhanh (Engine lõi viết bằng Rust) |
| Xử lý thiếu thư viện | Báo lỗi thiếu gói (cần npm i) |
Báo lỗi ModuleNotFoundError |
Tự động fetch và đồng bộ trước khi chạy |
Hình 2: Trình khởi chạy thông minh giúp loại bỏ gánh nặng ghi nhớ các tham số dòng lệnh phức tạp.
3. Ý Tưởng Xây Dựng “Smart Launcher” Tự Động Hóa Không Cần Nhớ Lệnh
Khi một lập trình viên quản lý từ vài chục đến hàng trăm dự án mã nguồn mở hoặc sản phẩm thử nghiệm, các vấn đề gây ức chế thường xuyên xảy ra:
- Không nhớ dự án này là Node.js (cần chạy
npm run devhaynpm start) hay Python. - Một thư mục chứa nhiều phiên bản thử nghiệm:
crawler_v1.py,crawler_v2_async.py,bot_test.py. Mở terminal lên phải gõ từng ký tự tên tệp rất mất thời gian. - Máy tính cài đặt cùng lúc nhiều phiên bản Python khác nhau: Python 3.10 (phục vụ thư viện cũ), Python 3.12 (ổn định) và Python 3.14 (thử nghiệm tính năng Free-threaded GIL mới). Làm sao để chỉ định chạy phiên bản nào một cách linh hoạt nhất?
Để giải quyết dứt điểm điều này, chúng ta xây dựng một Smart Launcher với luồng hoạt động chuẩn hóa:
│
▼
┌────────────────────────────────────────────────────────┐
│ 1. QUÉT PHIÊN BẢN PYTHON HỆ THỐNG │
│ Duyệt qua biến PATH: Dò tìm toàn bộ file python.exe │
│ Bóc tách version: [1] Python 3.10 | [2] Python 3.12… │
└───────────────────────────┬────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ 2. QUÉT TỆP KHỞI CHẠY BÊN TRONG THƯ MỤC DỰ ÁN │
│ • Tệp .py chứa chuỗi “__main__” │
│ • Tệp package.json chứa các scripts (“dev”, “start”..) │
│ • Trích xuất thuộc tính LastWriteTime (ngày giờ sửa) │
└───────────────────────────┬────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ 3. SẮP XẾP VÀ HIỂN THỊ MENU TRỰC QUAN │
│ Sắp xếp tệp mới chỉnh sửa lên trên cùng │
│ In bảng hiển thị có căn lề cột chuẩn xác │
└───────────────────────────┬────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ 4. TIẾP NHẬN CÚ PHÁP VÀ KÍCH HOẠT THỰC THI │
│ • Nhập 1 số (vd: 3) ──▶ Chạy Node.js script tương ứng │
│ • Nhập 2 số (vd: 2 1) ──▶ Chạy Python số 2 với Tệp số 1│
│ • Tự động kích hoạt virtualenv nếu có (.venv/Scripts) │
│ • Ưu tiên dùng ‘uv run’ nếu có tệp pyproject.toml │
└────────────────────────────────────────────────────────┘
4. Cơ Chế Nhận Diện Tệp Khởi Chạy Thông Minh (Quét Khối __main__)
Hầu hết các công cụ đơn giản đều chỉ tìm các tệp có tên cố định như main.py hoặc app.py. Nhưng trong thực tế, các dự án phức tạp thường có cấu trúc file đa dạng. Bí quyết kỹ thuật ở đây là soi chiếu nội dung mã nguồn bên trong:
Trong Python, một tệp được thiết kế để chạy trực tiếp (thay vì làm module thư viện được import) luôn chứa khối lệnh rẽ nhánh chuẩn mực:
Trong PowerShell, chúng ta sử dụng lệnh Select-String -Pattern "__main__" -Quiet để quét siêu nhanh qua toàn bộ các tệp .py ở thư mục gốc. Nếu tệp nào chứa chuỗi này, script sẽ tự động ghi nhận đó là một tệp có thể chạy được (Runnable Target) và đưa vào menu.
5. Thuật Toán Quét Đa Phiên Bản Python Trên Hệ Thống Và Ghép Lệnh Kép
Trên hệ điều hành Windows, người dùng có thể cài đặt nhiều bản Python phân phối chính thức từ python.org, Anaconda hoặc Windows Store. Đường dẫn của chúng được ghi nhận trong biến môi trường $env:PATH.
Cơ chế quét tự động:
- Script phân tách biến
$env:PATHqua dấu chấm phẩy (;). - Kiểm tra xem thư mục nào có chứa tệp thực thi
python.exe. - Gọi ngầm lệnh
python.exe --versionđể bóc tách chuỗi phiên bản chính xác (ví dụ:Python 3.12.5). - Lọc bỏ các đường dẫn trùng lặp và lưu thành danh sách mảng đánh số:
[1] Python 3.10,[2] Python 3.12,[3] Python 3.14.
Cơ chế nhập ghép lệnh kép:
Khi danh sách được in ra màn hình, người dùng có thể truyền vào 2 tham số cách nhau bởi dấu cách:
- Cú pháp:
<Số_Thứ_Tự_Python> <Số_Thứ_Tự_File>(Ví dụ nhập:2 1). - Script sẽ phân giải mảng: Trích xuất đường dẫn
python.exethứ 2 trong hệ thống để thực thi tệp mã nguồn đứng thứ 1 trong danh sách dự án. - Nếu chạy script của Node.js, người dùng chỉ cần gõ 1 số duy nhất (ví dụ:
3) để chạynpm run dev.
6. 4 Lỗi Điển Hình Trên Windows 10/11 Khi Dùng PowerShell & Cách Khắc Phục
Khi viết công cụ tự động hóa hệ thống bằng PowerShell trên Windows, 99% kỹ sư sẽ vướng phải 4 “bẫy ngầm” sau đây:
Nguyên nhân: PowerShell mặc định (phiên bản 5.1 trên Windows 10) đọc tệp tin dưới bảng mã ANSI. Nếu tệp script chứa các icon emoji hoặc tiếng Việt có dấu lưu dưới dạng UTF-8 không có BOM, PowerShell sẽ nhận nhầm các byte và nuốt mất các dấu đóng ngoặc nhọn } hoặc nháy đơn ', dẫn đến lỗi The string is missing the terminator.
Khắc phục: Sử dụng chuỗi ký tự ASCII thuần túy cho thông báo hệ thống, hoặc lưu tệp tin dưới định dạng UTF-8 with BOM.
Nguyên nhân: Nhiều lập trình viên quen dùng printf của Bash/C để căn lề bảng biểu. Trong PowerShell, printf không phải là cmdlet có sẵn.
Khắc phục: Sử dụng toán tử định dạng chuỗi -f bản địa của PowerShell (ví dụ: Write-Host ("{0,-5} {1,-20}" -f $stt, $name)) để căn chỉnh cột thẳng tắp mà không phụ thuộc vào tiện ích ngoài.
Nguyên nhân: Khi câu lệnh Get-ChildItem tìm thấy 2 file trở lên, nó trả về một Array (Mảng). Nhưng nếu chỉ tìm thấy đúng 1 file, PowerShell 5.1 sẽ tự động “tháo gói” và trả về một Single Object. Khi đưa vào vòng lặp hoặc mảng tiếp theo, các thuộc tính .Name bị lệch vị trí, dẫn đến việc bảng menu bị rỗng tên file.
Khắc phục: Khởi tạo danh sách bằng đối tượng định kiểu chặt chẽ: New-Object System.Collections.Generic.List[Object] và ép kiểu mảng cố định [array]$runnable_files sau khi sắp xếp.
Nguyên nhân: Windows chặn chạy script chưa ký số, hoặc đường dẫn thư mục có chứa khoảng trắng (ví dụ: D:Du An Moi) làm vỡ tham số của PowerShell.
Khắc phục: Truyền cờ -ExecutionPolicy Bypass khi kích hoạt và luôn gọi hàm .Trim('"').Trim() để làm sạch chuỗi đường dẫn đầu vào.
7. Mã Nguồn Hoàn Chỉnh: Script PowerShell Chuẩn Hóa 100%
Dưới đây là toàn bộ mã nguồn của tệp smart_run.ps1 đã được vá toàn bộ các lỗi hiển thị, tương thích từ Windows 10 đến Windows 11:
param (
[string]$TargetFolderInput
)
# Lam sach duong dan tranh loi khoang trang hoac dau nhay tu Context Menu
if (-not $TargetFolderInput) {
Write-Host "[-] Chua co thu muc nao duoc truyen vao!" -ForegroundColor Red
Read-Host "An Enter de thoat..."
Exit
}
$TargetFolder = $TargetFolderInput.Trim('"').Trim()
if (-not (Test-Path -Path $TargetFolder -PathType Container)) {
Write-Host "[-] Duong dan khong hop le: $TargetFolder" -ForegroundColor Red
Read-Host "An Enter de thoat..."
Exit
}
# --- 1. QUET TAT CA PHIEN BAN PYTHON CO TRONG BIEN MOI TRUONG PATH ---
$python_executables = @()
$env_paths = $env:PATH -split ';'
foreach ($path in $env_paths) {
if ($path -and (Test-Path -Path $path -PathType Container)) {
$py_file = Join-Path $path "python.exe"
if (Test-Path -Path $py_file -PathType Leaf) {
try {
$version_str = & $py_file --version 2>&1
if ($version_str -match "Pythons+([0-9.]+)") {
$ver = $Matches[1]
if ($python_executables.Path -notcontains $py_file) {
$python_executables += [PSCustomObject]@{
Version = $ver
Path = $py_file
}
}
}
} catch {}
}
}
}
# --- 2. DI CHUYEN VA QUET CAC TEP TRONG THU MUC DU AN ---
Set-Location -Path $TargetFolder
Write-Host "[*] Dang quet thu muc: [$TargetFolder]..." -ForegroundColor Cyan
Write-Host "----------------------------------------------------------------------"
# Su dung Generic List de ngan chan PowerShell tu dong giai nen mang khi chi co 1 file
$runnable_list = New-Object System.Collections.Generic.List[Object]
# Quet cac tep Python chua khoi lenh __main__
$py_files = @(Get-ChildItem -Filter *.py -Depth 0 -ErrorAction SilentlyContinue)
foreach ($file in $py_files) {
if (Select-String -Path $file.FullName -Pattern "__main__" -Quiet) {
$obj = [PSCustomObject]@{
Type = "Python"
Name = $file.Name
Command = "python"
LastModified = $file.LastWriteTime
}
$runnable_list.Add($obj)
}
}
# Quet cac script duoc dinh nghia trong package.json cua Node.js
if (Test-Path -Path "package.json") {
try {
$pkg_file = Get-Item "package.json"
$pkg = Get-Content -Raw -Path "package.json" | ConvertFrom-Json
if ($pkg.scripts) {
foreach ($script_name in $pkg.scripts.PSObject.Properties.Name) {
$obj = [PSCustomObject]@{
Type = "Node"
Name = "npm run $script_name"
Command = $script_name
LastModified = $pkg_file.LastWriteTime
}
$runnable_list.Add($obj)
}
}
} catch {}
}
if ($runnable_list.Count -eq 0) {
Write-Host "[!] Khong tim thay file chay nao (chua __main__ hoac package.json)." -ForegroundColor Yellow
Read-Host "An Enter de thoat..."
Exit
}
# --- 3. SAP XEP TEP MOI SUA LEN DAU DANH SACH ---
[array]$runnable_files = $runnable_list | Sort-Object LastModified -Descending
# --- 4. HIEN THI DANH SACH PYTHON CO SAN ---
Write-Host "[+] PHIEN BAN PYTHON TIM THAY:" -ForegroundColor Green
if ($python_executables.Count -eq 0) {
Write-Host " [!] Dung trinh thong dich 'python' mac dinh cua he thong." -ForegroundColor Yellow
} else {
for ($p = 1; $p -le $python_executables.Count; $p++) {
$py = $python_executables[$p-1]
Write-Host " [$p] Python v$($py.Version) -> $($py.Path)"
}
}
Write-Host "----------------------------------------------------------------------"
# --- 5. HIEN THI MENU LUA CHON CO CAN LE CHUAN XAC ---
Write-Host "[+] DANH SACH TEP / SCRIPTS CO THE CHAY (Moi sua o tren):" -ForegroundColor Green
Write-Host (" {0,-5} {1,-20} {2,-30}" -f "STT", "Last Modified", "Command / File Name")
Write-Host (" {0,-5} {1,-20} {2,-30}" -f "---", "-------------", "-------------------")
for ($i = 1; $i -le $runnable_files.Count; $i++) {
$item = $runnable_files[$i-1]
$time_str = $item.LastModified.ToString("yyyy-MM-dd HH:mm:ss")
[string]$stt = $i.ToString()
[string]$name = $item.Name
if ($item.Type -eq "Node") {
Write-Host (" [{0,-3}] {1,-20} [Node.js] {2}" -f $stt, $time_str, $name)
} else {
Write-Host (" [{0,-3}] {1,-20} [Python ] {2}" -f $stt, $time_str, $name)
}
}
Write-Host "----------------------------------------------------------------------"
# --- 6. XU LY LUA CHON DA THAM SO ---
Write-Host "HUONG DAN CU PHAP:" -ForegroundColor Gray
Write-Host " - Chon Python : Nhap '<So_Python> <So_File>' (Vi du: 2 1 de chay Python #2 voi File #1)" -ForegroundColor Gray
Write-Host " - Chon Node.js: Chi can nhap '<So_File>' (Vi du: 3 de chay script #3)" -ForegroundColor Gray
Write-Host ""
$input_choice = Read-Host "=> Nhap lua chon cua ban"
[string[]]$parts = $input_choice -split 's+' | Where-Object { $_ -ne "" }
$selected_py_path = "python"
$file_index_str = ""
if ($parts.Count -eq 2) {
$py_idx = [int]$parts[0]
$file_idx = [int]$parts[1]
if ($py_idx -ge 1 -and $py_idx -le $python_executables.Count) {
$selected_py_path = $python_executables[$py_idx-1].Path
} else {
Write-Host "[-] Thu tu Python khong ton tai. Dung 'python' mac dinh." -ForegroundColor Yellow
}
$file_index_str = $file_idx
} elseif ($parts.Count -eq 1) {
$file_index_str = $parts[0]
} else {
Write-Host "[-] Cu phap khong hop le!" -ForegroundColor Red
Read-Host "An Enter de thoat..."
Exit
}
$choice_int = 0
if (-not [int]::TryParse($file_index_str, [ref]$choice_int) -or $choice_int -lt 1 -or $choice_int -gt $runnable_files.Count) {
Write-Host "[-] So thu tu tep khong hop le!" -ForegroundColor Red
Read-Host "An Enter de thoat..."
Exit
}
$selected_file = $runnable_files[$choice_int-1]
Write-Host "[*] Dang khoi dong ung dung..." -ForegroundColor Green
Write-Host "----------------------------------------------------------------------"
# --- 7. THUC THI DUA TREN HE SINH THAI ---
if ($selected_file.Type -eq "Node") {
npm run $selected_file.Command
} else {
# Tu dong kich hoat Virtualenv neu phat hien co san trong thu muc
if (Test-Path -Path "..venvScriptsActivate.ps1") {
& "..venvScriptsActivate.ps1"
} elseif (Test-Path -Path ".venvScriptsActivate.ps1") {
& ".venvScriptsActivate.ps1"
}
# Neu he thong co 'uv' va du an co pyproject.toml hoac uv.lock, uu tien dung uv
if ((Get-Command uv -ErrorAction SilentlyContinue) -and ((Test-Path "pyproject.toml") -or (Test-Path "uv.lock"))) {
if ($parts.Count -eq 2) {
uv run --python "$selected_py_path" $selected_file.Name
} else {
uv run $selected_file.Name
}
} else {
& $selected_py_path $selected_file.Name
}
}
Write-Host "`n----------------------------------------------------------------------"
Write-Host "[V] Ung dung da dung hoac hoan tat chu trinh." -ForegroundColor Yellow
Read-Host "An Enter de dong cua so nay..."
8. Tích Hợp Trực Tiếp Vào Menu Chuột Phải Windows (Registry Hack)
Để không cần mở terminal, không cần kéo thả file .bat trung gian, bạn có thể biến script này thành một tính năng bản địa của Windows Explorer: Click chuột phải vào bất kỳ thư mục dự án nào và chọn SmartLauncherApp.
Bước 1: Lưu tệp script PowerShell cố định
Lưu file trên vào đường dẫn cố định, ví dụ: D:MakPython2.SmartLauncherDragsmart_run.ps1.
Bước 2: Tạo tệp đăng ký Registry (Add_SmartLauncher.reg)
Tạo một tệp tin văn bản có tên Add_SmartLauncher.reg trên Desktop với nội dung sau (chú ý dùng dấu gạch chéo ngược kép \):
Windows Registry Editor Version 5.00
; --- Khi click chuot phai VÀO thu muc du an tu ben ngoai ---
[HKEY_CLASSES_ROOTDirectoryshellSmartLauncherApp]
@="SmartLauncherApp"
"Icon"="powershell.exe"
[HKEY_CLASSES_ROOTDirectoryshellSmartLauncherAppcommand]
@="powershell.exe -NoProfile -ExecutionPolicy Bypass -File "D:\MakPython\2.SmartLauncherDrag\smart_run.ps1" "%1""
; --- Khi click chuot phai vao KHOANG TRANG ben trong thu muc ---
[HKEY_CLASSES_ROOTDirectoryBackgroundshellSmartLauncherApp]
@="SmartLauncherApp"
"Icon"="powershell.exe"
[HKEY_CLASSES_ROOTDirectoryBackgroundshellSmartLauncherAppcommand]
@="powershell.exe -NoProfile -ExecutionPolicy Bypass -File "D:\MakPython\2.SmartLauncherDrag\smart_run.ps1" "%V""
Nhấp đúp chuột vào file Add_SmartLauncher.reg, chọn Yes khi Windows cảnh báo UAC. Ngay lập tức, menu chuột phải của bạn sẽ xuất hiện mục SmartLauncherApp cực kỳ chuyên nghiệp!
9. Câu Hỏi Thường Gặp Về CLI & Môi Trường Chạy Ứng Dụng (FAQ)
1. Có thể thay thế hoàn toàn pip bằng uv trong dự án Python không?
Có. uv tương thích 100% với các cờ tham số của pip (ví dụ: uv pip install -r requirements.txt), nhưng có tốc độ phân giải gói nhanh gấp hàng chục lần do sử dụng thuật toán PubGrub viết bằng Rust và cơ chế song song hóa tối đa tài nguyên CPU.
2. Nếu dự án có cả package.json lẫn file Python thì Smart Launcher sẽ xử lý ra sao?
Script sẽ quét đồng thời cả hai hệ sinh thái, đưa toàn bộ danh sách script Node.js và các tệp Python chứa __main__ vào chung một menu đánh số. Các tệp được sắp xếp theo thời gian chỉnh sửa mới nhất lên trên, giúp lập trình viên thoải mái lựa chọn chạy backend hay frontend chỉ bằng 1 thao tác.
3. Làm thế nào để gỡ bỏ SmartLauncherApp khỏi Menu chuột phải khi không muốn dùng nữa?
Bạn chỉ cần tạo một file Remove_SmartLauncher.reg và xóa 2 khóa registry tương ứng bằng cách thêm dấu trừ (-) phía trước đường dẫn: [-HKEY_CLASSES_ROOTDirectoryshellSmartLauncherApp] và [-HKEY_CLASSES_ROOTDirectoryBackgroundshellSmartLauncherApp], sau đó nhấp đúp để thực thi.
Trang Bị Thiết Bị Lập Trình & Sách Công Nghệ Nâng Cao
Nâng cấp bàn phím cơ công thái học, sách tự động hóa PowerShell và giáo trình Python chuyên sâu:
https://docs.python.org/3/using/cmdline.html – Python Command Line Interface and Environment Specification
https://docs.astral.sh/uv/ – An extremely fast Python package and project manager written in Rust
https://learn.microsoft.com/en-us/powershell/scripting/overview – Microsoft PowerShell Documentation and Scripting Guide
https://learn.microsoft.com/en-us/windows/win32/shell/context-menu-handlers – Windows Shell Context Menu Integration Architecture