Spaces:
Build error
Build error
| # setup_and_run_fastapi.ps1 | |
| <# | |
| هدف: | |
| - ایجاد محیط مجازی (venv) | |
| - نصب fastapi و uvicorn | |
| - نوشتن main.py با API پایه (در صورت نبود) | |
| - اجرای uvicorn در یک پنجره جدید (اختیاری) | |
| - تست سریع با Invoke-RestMethod (در صورت نیاز) | |
| نحوه اجرا: | |
| - PowerShell را با دسترسی مناسب باز کن (برای اجرای این اسکریپت نیاز به Policy مناسب داری) | |
| - اجرا: .\setup_and_run_fastapi.ps1 -Port 8000 -Host 0.0.0.0 -AutoRun | |
| - یا بدون AutoRun: .\setup_and_run_fastapi.ps1 | |
| #> | |
| <# | |
| پارامترها | |
| -Port: پورت سرور (default 8000) | |
| -Host: آدرس میزبانی (default 0.0.0.0) | |
| -AutoRun: اگر حضور باشد، uvicorn در یک پنجرهٔ جدید اجرا میشود | |
| #> | |
| param( | |
| [string]$Port = "8000", | |
| [string]$Host = "0.0.0.0", | |
| [string]$ProjectDir = (Get-Location).Path, | |
| [switch]$AutoRun | |
| ) | |
| $ErrorActionPreference = "Stop" | |
| try { | |
| Write-Host "شروع فرآیند آمادهسازی در پوشه: $ProjectDir" | |
| # بررسی وجود پایتون در PATH | |
| $pyCmd = Get-Command python -ErrorAction SilentlyContinue | |
| if (-not $pyCmd) { | |
| Write-Error "Python در PATH شما پیدا نشد. لطفاً Python 3.13.7+ را نصب کرده و در PATH قرار بده." | |
| exit 1 | |
| } | |
| Write-Host "Python ورژن: $(python --version 2>&1)" | |
| $venvPath = Join-Path -Path $ProjectDir -ChildPath "venv" | |
| # ایجاد venv در صورت نبود | |
| if (-Not (Test-Path $venvPath)) { | |
| Write-Host "در حال ایجاد محیط مجازی (venv) ..." | |
| & python -m venv $venvPath | |
| } else { | |
| Write-Host "محیط مجازی قبلاً وجود دارد." | |
| } | |
| $venvPython = Join-Path -Path $venvPath -ChildPath "Scripts\python.exe" | |
| # اطمینان از وجود پکیجها | |
| Write-Host "ارتقاء pip و نصب وابستگیها..." | |
| & $venvPython -m pip install --upgrade pip | |
| & $venvPython -m pip install fastapi uvicorn | |
| # اضافه کردن main.py اگر وجود ندارد | |
| $mainPath = Join-Path -Path $ProjectDir -ChildPath "main.py" | |
| if (-Not (Test-Path $mainPath)) { | |
| $mainContent = @" | |
| from fastapi import FastAPI | |
| from pydantic import BaseModel | |
| app = FastAPI() | |
| class GenerateRequest(BaseModel): | |
| prompt: str | |
| @app.post("/generate") | |
| async def generate(req: GenerateRequest): | |
| return {"received_prompt": req.prompt, "status": "ok"} | |
| @app.get("/status") | |
| async def status(): | |
| return {"status": "running"} | |
| "@ | |
| Set-Content -Path $mainPath -Value $mainContent -Encoding UTF8 | |
| Write-Host "main.py ایجاد شد در: $mainPath" | |
| } else { | |
| Write-Host "main.py وجود دارد. از آن استفاده میشود." | |
| } | |
| # اجرای uvicorn | |
| if ($AutoRun) { | |
| Write-Host "در حال اجرای uvicorn در پنجرهٔ جدید..." | |
| $args = @("-m","uvicorn","main:app","--reload","--port",$Port,"--host",$Host) | |
| Start-Process -FilePath $venvPython -ArgumentList $args -WindowStyle Normal -WorkingDirectory $ProjectDir | |
| Start-Sleep -Seconds 3 | |
| # تست ساده بعد از راهاندازی | |
| $maxWait = 15 | |
| $t = 0 | |
| $ready = $false | |
| while (-not $ready -and $t -lt $maxWait) { | |
| try { | |
| $resp = Invoke-RestMethod -Uri "http://localhost:$Port/status" -ErrorAction Stop | |
| $ready = $true | |
| Write-Host "API در دسترس است: وضعیت -> $($resp.status)" | |
| } catch { | |
| Start-Sleep -Seconds 1 | |
| $t++ | |
| } | |
| } | |
| if (-not $ready) { | |
| Write-Host "تست Startup به صورت کامل انجام نشد. میتوانید به صورت دستی به پورت $Port مراجعه کنید." | |
| } | |
| } else { | |
| Write-Host "برای اجرای سرور از این دستور استفاده کن (در همان پوشه):" | |
| Write-Host " `"$venvPython`" -m uvicorn main:app --reload --port $Port --host $Host" | |
| } | |
| Write-Host "تمام شد. با موفقیت آماده است." | |
| Write-Host "docs: http://localhost:$Port/docs" | |
| } catch { | |
| Write-Error "خطا در اجرای اسکریپت: $_" | |
| } |