windows:portable_tools:python:start
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| windows:portable_tools:python:start [2026/05/14 12:04] – | windows:portable_tools:python:start [2026/05/14 12:06] (текущий) – | ||
|---|---|---|---|
| Строка 8: | Строка 8: | ||
| '' | '' | ||
| - | <code powershell | + | ==== Проверка на соответствие ==== |
| + | |||
| + | <code powershell | ||
| # ========================================= | # ========================================= | ||
| - | # File: python_env_repair.ps1 | + | # File: python_env_check.ps1 |
| # ========================================= | # ========================================= | ||
| # DESCRIPTION: | # DESCRIPTION: | ||
| - | # | + | # |
| - | # | + | |
| # | # | ||
| # FEATURES: | # FEATURES: | ||
| - | # | + | # |
| - | # - Enables "import site" | + | # python.exe |
| - | # - Creates required folders | + | # |
| - | # | + | # import site |
| - | # - Verifies user-site isolation | + | # pip |
| - | # | + | # site-packages |
| + | # writable TEMP | ||
| + | # PYTHONHOME | ||
| + | # | ||
| + | # user-site | ||
| # | # | ||
| - | # NOTES: | + | # - Displays: |
| - | # | + | # |
| - | # includes ensurepip by default. | + | # Executable path |
| - | # | + | # Pip version |
| - | # pip may need to be copied manually | + | # Site-packages path |
| - | # from another Python installation. | + | |
| # | # | ||
| # USAGE: | # USAGE: | ||
| # | # | ||
| - | # | + | # |
| - | # | + | |
| # | # | ||
| - | # Custom path: | + | # NOTES: |
| - | # powershell -ExecutionPolicy Bypass -File .\python_env_repair.ps1 "D:\PortablePython" | + | # Script must be placed INSIDE portable Python root directory. |
| + | # | ||
| + | # EXAMPLE: | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| # | # | ||
| # ========================================= | # ========================================= | ||
| Строка 52: | Строка 63: | ||
| function Write-Status { | function Write-Status { | ||
| - | |||
| param ( | param ( | ||
| [string]$Status, | [string]$Status, | ||
| Строка 59: | Строка 69: | ||
| switch ($Status) { | switch ($Status) { | ||
| - | + | | |
| - | | + | " |
| - | " | + | " |
| - | " | + | default { $color = " |
| - | " | + | |
| - | + | ||
| - | default { $Color = " | + | |
| } | } | ||
| - | Write-Host (" | + | Write-Host (" |
| Write-Host $Message | Write-Host $Message | ||
| + | } | ||
| + | |||
| + | function Test-WritableDirectory { | ||
| + | param ( | ||
| + | [string]$Path | ||
| + | ) | ||
| + | |||
| + | try { | ||
| + | $testFile = Join-Path $Path " | ||
| + | |||
| + | " | ||
| + | |||
| + | if (Test-Path $testFile) { | ||
| + | Remove-Item $testFile -Force -ErrorAction SilentlyContinue | ||
| + | return $true | ||
| + | } | ||
| + | |||
| + | return $false | ||
| + | } | ||
| + | catch { | ||
| + | return $false | ||
| + | } | ||
| } | } | ||
| Строка 90: | Строка 119: | ||
| $PythonExe = Join-Path $RootDir " | $PythonExe = Join-Path $RootDir " | ||
| + | $LauncherPath = Join-Path $RootDir " | ||
| + | |||
| + | Write-Host "" | ||
| + | Write-Host " | ||
| + | Write-Host $RootDir | ||
| + | Write-Host "" | ||
| # ----------------------------------------- | # ----------------------------------------- | ||
| Строка 97: | Строка 132: | ||
| Write-Host "" | Write-Host "" | ||
| Write-Host " | Write-Host " | ||
| - | Write-Host " Portable Python | + | Write-Host " Portable Python |
| Write-Host " | Write-Host " | ||
| - | Write-Host "" | ||
| - | |||
| - | Write-Host " | ||
| - | Write-Host $RootDir | ||
| Write-Host "" | Write-Host "" | ||
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | # Verify | + | # Check python.exe |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | if (-not (Test-Path $PythonExe)) { | + | if (Test-Path $PythonExe) { |
| + | | ||
| + | } | ||
| + | else { | ||
| Write-Status " | Write-Status " | ||
| Write-Host "" | Write-Host "" | ||
| Read-Host "Press Enter" | Read-Host "Press Enter" | ||
| - | |||
| exit | exit | ||
| } | } | ||
| - | |||
| - | Write-Status " | ||
| # ----------------------------------------- | # ----------------------------------------- | ||
| Строка 125: | Строка 155: | ||
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | $PthFile = Get-ChildItem | + | $PthFile = Get-ChildItem -Path $RootDir -Filter " |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | + | ||
| - | if (-not $PthFile) { | + | |
| + | if ($PthFile) { | ||
| + | Write-Status " | ||
| + | } | ||
| + | else { | ||
| Write-Status " | Write-Status " | ||
| - | |||
| - | Write-Host "" | ||
| - | Read-Host "Press Enter" | ||
| - | |||
| - | exit | ||
| } | } | ||
| - | |||
| - | Write-Status " | ||
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | # Enable | + | # Check import site |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | $PthContent = Get-Content | + | if ($PthFile) { |
| - | $ImportSiteEnabled | + | |
| - | for ($i = 0; $i -lt $PthContent.Count; | + | |
| - | $Line = $PthContent[$i].Trim() | + | |
| - | if ($Line -eq " | + | |
| - | $ImportSiteEnabled = $true | + | |
| + | | ||
| + | } | ||
| } | } | ||
| - | if ($Line -eq "# | + | if ($ImportSiteEnabled) { |
| - | + | | |
| - | | + | } |
| - | + | else { | |
| - | | + | Write-Status "WARN" " |
| - | + | ||
| - | Write-Status "INFO" "Enabled | + | |
| } | } | ||
| } | } | ||
| - | if (-not $ImportSiteEnabled) { | + | # ----------------------------------------- |
| + | # Python Version | ||
| + | # ----------------------------------------- | ||
| - | | + | try { |
| + | |||
| + | | ||
| - | Write-Status "INFO" "Added import site" | + | Write-Status "OK" "$PythonVersion" |
| + | } | ||
| + | catch { | ||
| + | Write-Status " | ||
| } | } | ||
| - | |||
| - | Set-Content ` | ||
| - | -Path $PthFile.FullName ` | ||
| - | -Value $PthContent ` | ||
| - | -Encoding UTF8 | ||
| - | |||
| - | Write-Status " | ||
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | # Create Required Folders | + | # Executable Path |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | $RequiredFolders = @( | + | try { |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | ) | + | |
| - | foreach ($Folder in $RequiredFolders) { | + | |
| - | $FullPath = Join-Path $RootDir $Folder | + | |
| + | } | ||
| + | catch { | ||
| + | Write-Status " | ||
| + | } | ||
| - | if (-not (Test-Path $FullPath)) { | + | # ----------------------------------------- |
| + | # Check pip | ||
| + | # ----------------------------------------- | ||
| - | New-Item ` | + | try { |
| - | -ItemType Directory ` | + | |
| - | -Path $FullPath ` | + | |
| - | -Force | Out-Null | + | |
| - | | + | $PipVersion = & $LauncherPath -m pip --version 2>& |
| + | |||
| + | if ($LASTEXITCODE -eq 0) { | ||
| + | | ||
| + | Write-Host " | ||
| } | } | ||
| else { | else { | ||
| - | + | | |
| - | | + | |
| } | } | ||
| + | } | ||
| + | catch { | ||
| + | Write-Status " | ||
| } | } | ||
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | # Check pip | + | # Check site-packages |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | |||
| - | $PipInstalled = $false | ||
| try { | try { | ||
| - | & $PythonExe | + | |
| if ($LASTEXITCODE -eq 0) { | if ($LASTEXITCODE -eq 0) { | ||
| - | $PipInstalled = $true | + | Write-Status " |
| + | Write-Host " | ||
| + | |||
| + | if (Test-Path | ||
| + | Write-Status " | ||
| + | } | ||
| + | else { | ||
| + | Write-Status " | ||
| + | } | ||
| + | } | ||
| + | else { | ||
| + | Write-Status " | ||
| } | } | ||
| } | } | ||
| - | catch {} | + | catch { |
| - | + | Write-Status "WARN" "Cannot check site-packages" | |
| - | if ($PipInstalled) { | + | |
| - | + | ||
| - | Write-Status "OK" "pip available" | + | |
| } | } | ||
| - | else { | ||
| - | Write-Status " | + | # ----------------------------------------- |
| + | # Check user-site | ||
| + | # ----------------------------------------- | ||
| - | Write-Status " | + | try { |
| - | Write-Status "INFO" "Copy pip manually from another Python installation if needed" | + | |
| + | |||
| + | if ($UserSite -eq " | ||
| + | | ||
| + | } | ||
| + | else { | ||
| + | Write-Status " | ||
| + | } | ||
| + | } | ||
| + | catch { | ||
| + | Write-Status " | ||
| } | } | ||
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | # Create py_portable.cmd | + | # Check User Site Path |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | $LauncherPath = Join-Path $RootDir " | + | try { |
| - | $LauncherContent | + | |
| - | :: ======================================== | + | |
| - | :: File: py_portable.cmd | + | |
| - | :: ======================================== | + | |
| - | @echo off | + | if ($UserSite -eq " |
| - | chcp 65001 >nul | + | |
| - | setlocal | + | Write-Status " |
| + | Write-Host " | ||
| + | } | ||
| + | else { | ||
| - | :: ---------------------------------------- | + | Write-Status " |
| - | :: Portable Python Root | + | Write-Host " |
| - | :: ---------------------------------------- | + | } |
| + | } | ||
| + | catch { | ||
| - | set "PYROOT=%~dp0" | + | Write-Status |
| + | } | ||
| - | :: ---------------------------------------- | ||
| - | :: Isolated Environment | ||
| - | :: ---------------------------------------- | ||
| - | set " | + | # ----------------------------------------- |
| - | set " | + | # Check PYTHONHOME |
| - | set " | + | # ----------------------------------------- |
| - | :: Optional: | + | if ($env:PYTHONHOME) { |
| - | :: set "PYTHONDONTWRITEBYTECODE=1" | + | |
| + | } | ||
| + | else { | ||
| + | Write-Status | ||
| + | } | ||
| - | set " | + | # ----------------------------------------- |
| - | + | # Check PYTHONPATH | |
| - | :: ---------------------------------------- | + | # ----------------------------------------- |
| - | :: Interactive Mode | + | |
| - | :: ---------------------------------------- | + | |
| - | if " | + | if ($env: |
| - | + | | |
| - | | + | } |
| - | + | else { | |
| - | endlocal | + | Write-Status " |
| - | exit /b | + | } |
| - | ) | + | |
| - | + | ||
| - | :: ---------------------------------------- | + | |
| - | :: Python -c Support | + | |
| - | :: ---------------------------------------- | + | |
| - | + | ||
| - | if "%~1"=="-c" ( | + | |
| - | + | ||
| - | " | + | |
| - | + | ||
| - | endlocal | + | |
| - | exit /b | + | |
| - | ) | + | |
| - | + | ||
| - | :: ---------------------------------------- | + | |
| - | :: Python -m Support | + | |
| - | :: ---------------------------------------- | + | |
| - | + | ||
| - | if " | + | |
| - | + | ||
| - | " | + | |
| - | + | ||
| - | endlocal | + | |
| - | exit /b | + | |
| - | ) | + | |
| - | :: ---------------------------------------- | + | |
| - | :: Script Mode | + | |
| - | :: ---------------------------------------- | + | |
| - | + | ||
| - | set " | + | |
| - | shift | + | |
| - | + | ||
| - | pushd " | + | |
| - | + | ||
| - | " | + | |
| - | + | ||
| - | popd | + | |
| - | + | ||
| - | endlocal | + | |
| - | '@ | + | |
| - | + | ||
| - | Set-Content ` | + | |
| - | | + | |
| - | -Value $LauncherContent ` | + | |
| - | -Encoding ASCII | + | |
| - | + | ||
| - | Write-Status " | + | |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | # Verify user-site isolation | + | # Check TEMP Write Access |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | Write-Status | + | $TempDir = Join-Path $RootDir |
| - | try { | + | if (-not (Test-Path $TempDir)) |
| - | | + | |
| - | + | | |
| - | if ($UserSite -match " | + | |
| - | + | ||
| - | | + | |
| - | } | + | |
| - | else { | + | |
| - | + | ||
| - | Write-Status " | + | |
| } | } | ||
| + | catch {} | ||
| } | } | ||
| - | catch { | ||
| - | | + | if (Test-WritableDirectory -Path $TempDir) { |
| + | | ||
| + | } | ||
| + | else { | ||
| + | Write-Status " | ||
| } | } | ||
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | # Show user-site path | + | # Check Local site-packages Folder |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | try { | + | $LocalSitePackages = Join-Path $RootDir " |
| - | | + | if (Test-Path |
| - | + | Write-Status | |
| - | Write-Host "" | + | } |
| - | Write-Host "User Site Path:" -ForegroundColor Cyan | + | else { |
| - | Write-Host $UserSitePath | + | Write-Status "WARN" "Local site-packages missing" |
| } | } | ||
| - | catch {} | + | |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | # Show sys.path | + | # Check sys.path |
| # ----------------------------------------- | # ----------------------------------------- | ||
| - | |||
| - | Write-Host "" | ||
| - | Write-Host " | ||
| try { | try { | ||
| + | |||
| + | Write-Host "" | ||
| + | Write-Host " | ||
| & $LauncherPath -c " | & $LauncherPath -c " | ||
| Строка 393: | Строка 383: | ||
| Write-Status " | Write-Status " | ||
| } | } | ||
| + | |||
| + | |||
| + | |||
| # ----------------------------------------- | # ----------------------------------------- | ||
| Строка 400: | Строка 393: | ||
| Write-Host "" | Write-Host "" | ||
| Write-Host " | Write-Host " | ||
| - | Write-Host " | + | Write-Host " |
| Write-Host " | Write-Host " | ||
| Write-Host "" | Write-Host "" | ||
| Строка 407: | Строка 400: | ||
| </ | </ | ||
| - | <code powershell > | + | ==== Исправление ==== |
| + | |||
| + | <code powershell | ||
| # ========================================= | # ========================================= | ||
| # File: python_env_repair.ps1 | # File: python_env_repair.ps1 | ||
windows/portable_tools/python/start.1778749442.txt.gz · Последнее изменение: —
