Запуск python напрямую вместо обёртки run.ps1
Профиль Windows Terminal вызывает .venv\Scripts\python.exe с PYTHONUTF8=1 в окружении профиля, поэтому промежуточный PowerShell и его настройка консоли больше не нужны.
This commit is contained in:
@@ -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 # печатает все команды, к серверам не ходит
|
||||
|
||||
@@ -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` в окружении профиля.
|
||||
|
||||
Откроется пульт: оба списка сразу на экране, отдельного шага «выбор действия» нет.
|
||||
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user