Запуск python напрямую вместо обёртки run.ps1

Профиль Windows Terminal вызывает .venv\Scripts\python.exe с
PYTHONUTF8=1 в окружении профиля, поэтому промежуточный PowerShell
и его настройка консоли больше не нужны.
This commit is contained in:
2026-08-20 06:05:36 +03:00
parent 975934373b
commit f48aa3bcbd
3 changed files with 12 additions and 79 deletions
+3 -1
View File
@@ -15,8 +15,10 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Команды
Запускать нужно интерпретатором из `.venv` — textual стоит там:
```bash
python pg_stand_sync.py # TUI-пульт (основной режим)
.venv/Scripts/python.exe pg_stand_sync.py # TUI-пульт (основной режим)
python pg_stand_sync.py --no-tui # то же текстовым меню
python pg_stand_sync.py list # базы стенда — самая быстрая проверка связи
python pg_stand_sync.py --dry-run sync DB # печатает все команды, к серверам не ходит
+9 -9
View File
@@ -12,20 +12,20 @@
copy config.example.json config.json
```
```powershell
.\run.ps1 -Setup
```
Заполнить `source` (стенд) и `target` (локальная PG), затем:
```powershell
.\run.ps1
.venv\Scripts\python.exe pg_stand_sync.py
```
`run.ps1` — обёртка запуска: берёт интерпретатор из `.venv` (иначе системный), переключает
консоль в UTF-8 и пробрасывает остальные аргументы в скрипт (`.\run.ps1 list`,
`.\run.ps1 --dry-run sync zpas`). `-Setup` создаёт окружение и ставит зависимости,
`-Tests` прогоняет тесты. Без обёртки всё то же работает через `python pg_stand_sync.py`.
Окружение создаётся один раз:
```powershell
python -m venv .venv; .venv\Scripts\python.exe -m pip install -r requirements.txt
```
В Windows Terminal заведён профиль **Tools → pg-stand-sync**: он вызывает
`.venv\Scripts\python.exe pg_stand_sync.py` напрямую, с `PYTHONUTF8=1` в окружении профиля.
Откроется пульт: оба списка сразу на экране, отдельного шага «выбор действия» нет.
-69
View File
@@ -1,69 +0,0 @@
<#
.SYNOPSIS
Запуск pg-stand-sync: находит интерпретатор, чинит кодировку консоли, пробрасывает аргументы.
.EXAMPLE
.\run.ps1 # пульт (TUI)
.\run.ps1 list # базы на стенде
.\run.ps1 --dry-run sync zpas # проверка команд без выполнения
.\run.ps1 -Setup # создать .venv и поставить зависимости
.\run.ps1 -Tests # прогнать тесты
#>
[CmdletBinding()]
param(
# Создать .venv и установить requirements.txt
[switch]$Setup,
# Прогнать tests_tui.py вместо запуска приложения
[switch]$Tests,
# Всё остальное уходит в pg_stand_sync.py как есть
[Parameter(ValueFromRemainingArguments = $true)]
[string[]]$Rest
)
$ErrorActionPreference = 'Stop'
$root = $PSScriptRoot
$venvPython = Join-Path $root '.venv\Scripts\python.exe'
# Русский лог и рамки Textual в cp866-консоли превращаются в мусор
[Console]::OutputEncoding = [Text.Encoding]::UTF8
[Console]::InputEncoding = [Text.Encoding]::UTF8
$env:PYTHONIOENCODING = 'utf-8'
function Find-Python {
if (Test-Path $venvPython) { return $venvPython }
foreach ($name in 'python', 'py') {
$cmd = Get-Command $name -ErrorAction SilentlyContinue
if ($cmd) { return $cmd.Source }
}
throw 'Python не найден: поставьте его или создайте окружение через .\run.ps1 -Setup'
}
if ($Setup) {
if (-not (Test-Path $venvPython)) {
$bootstrap = Find-Python
Write-Host "создаю .venv ($bootstrap)" -ForegroundColor Cyan
& $bootstrap -m venv (Join-Path $root '.venv')
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}
Write-Host 'ставлю зависимости' -ForegroundColor Cyan
& $venvPython -m pip install --disable-pip-version-check -r (Join-Path $root 'requirements.txt')
exit $LASTEXITCODE
}
$python = Find-Python
if ($Tests) {
& $python -m pytest (Join-Path $root 'tests_tui.py') -q @Rest
exit $LASTEXITCODE
}
# Без textual приложение молча откатится в текстовое меню — предупредить, пока не поздно
& $python -c 'import textual' 2>$null
if ($LASTEXITCODE -ne 0) {
Write-Host 'textual не установлен — откроется текстовый режим. Полный пульт: .\run.ps1 -Setup' `
-ForegroundColor Yellow
}
& $python (Join-Path $root 'pg_stand_sync.py') @Rest
exit $LASTEXITCODE