docs/
Outline
---
title: از ارور fcntl تا یه محیط لینوکس واقعی روی Windows
slug: wsl-setup
lang: fa
published: 2026-10-31
words: 436
lines: 92
size: 3.7 KB
read: 3 min read
reel: لینوکس رو آوردم پیش خودم، توی Windows
---
بکاند سایتم روی Windows بالا نمیاومد. همون کد روی سرور سالم کار میکرد. مشکل از کد نبود، از محیط بود. اینجا ارور دقیق، دلیلش و محیطی که الان باهاش کار میکنم رو نوشتم.
ارور
PS C:\sina_codes\website\backend> uv run gunicorn sina.asgi:application -c gunicorn.conf.py
Traceback (most recent call last):
File "...\gunicorn\util.py", line 7, in <module>
import fcntl
ModuleNotFoundError: No module named 'fcntl'
fcntl جزو خود Python هست، ولی فقط روی Unix. نسخهی Windows اصلاً اینو نداره و gunicorn خط ۷ فایل util.py ایمپورتش میکنه. با نصب هیچ پکیجی درست نمیشه، چون خود این سرور روی Windows اجرا نمیشه.
سرورها لینوکسن و بیشتر ابزارها اول برای لینوکس میان. agentهایی مثل Claude Code هم توی ترمینال کار میکنن، پس shellی که بهشون میدی تعیین میکنه چی کار میتونن بکنن. من نمیخواستم از Windows کوچ کنم یا dual boot بزنم، پس لینوکس رو آوردم پیش خودم.
۱. نصب WSL
PowerShell رو با دسترسی administrator باز کن:
wsl --install -d Ubuntu
اگه خواست ریستارت کن، بعد Ubuntu رو از منوی Start باز کن و یوزرنیم و پسورد بذار. چک کن نسخهت ۲ باشه:
wsl --version
wsl --list --verbose
۲. منابع کافی بهش بده
WSL خودش یه سهمی از RAM و هستهها برمیداره. خودت توی C:\Users\<you>\.wslconfig تعیینش کن. اینا عددهای واقعی منه، واسه لپتاپی با RAM زیاد. به نسبت سیستم خودت تغییرشون بده.
[wsl2]
processors=12
memory=20971520000
swap=8388608000
یعنی حدود ۱۹.۵ گیگ RAM و ۷.۸ گیگ swap. با این دستور اعمال میشه:
wsl --shutdown
۳. پروژه رو داخل لینوکس نگه دار
این همون قدمیه که همه جا میندازن. پروژه رو توی home لینوکس clone کن، نه توی /mnt/c.
cd ~
git clone <your-repo-url>
فایلهای /mnt/c برای هر خوندن از یه پل تا Windows رد میشن. نصب پکیج و اجرای تست کند میشه و file watcherها ممکنه تغییرها رو نبینن. داخل ~ یه filesystem واقعی لینوکس داری.
۴. ادیتورت رو همونجا باز کن
اکستنشن WSL رو توی VS Code یا Cursor نصب کن و داخل پروژه اینو بزن:
code .
پنجرهی ادیتور روی Windows میمونه، ولی ترمینال و language serverها و اکستنشنها توی لینوکس اجرا میشن، همونجایی که پروژه و agentت هستن.
۵. همون پروژه، این بار بالا میاد
curl -LsSf https://astral.sh/uv/install.sh | sh
cd ~/sina_codes/website/backend
uv run gunicorn sina.asgi:application -c gunicorn.conf.py
[INFO] Starting gunicorn 26.2.0
[INFO] Using worker: uvicorn_worker.UvicornWorker
agent رو هم همینجا اجرا کن
curl -fsSL https://claude.ai/install.sh | bash
cd ~/your-project
claude
حالا agent همون shellی رو داره که سرورت داره، پس چیزی که براش کار میکنه شانس واقعی داره که روی production هم کار کنه.
| بکاند سایتم روی Windows بالا نمیاومد. همون کد روی سرور سالم کار میکرد. مشکل از کد نبود، از محیط بود. اینجا ارور دقیق، دلیلش و محیطی که الان باهاش کار میکنم رو نوشتم. |
| ## ارور |
| ```text |
| PS C:\sina_codes\website\backend> uv run gunicorn sina.asgi:application -c gunicorn.conf.py |
| Traceback (most recent call last): |
| File "...\gunicorn\util.py", line 7, in <module> |
| import fcntl |
| ModuleNotFoundError: No module named 'fcntl' |
| ``` |
| `fcntl` جزو خود Python هست، ولی فقط روی Unix. نسخهی Windows اصلاً اینو نداره و gunicorn خط ۷ فایل `util.py` ایمپورتش میکنه. با نصب هیچ پکیجی درست نمیشه، چون خود این سرور روی Windows اجرا نمیشه. |
| سرورها لینوکسن و بیشتر ابزارها اول برای لینوکس میان. agentهایی مثل Claude Code هم توی ترمینال کار میکنن، پس shellی که بهشون میدی تعیین میکنه چی کار میتونن بکنن. من نمیخواستم از Windows کوچ کنم یا dual boot بزنم، پس لینوکس رو آوردم پیش خودم. |
| ## ۱. نصب WSL |
| PowerShell رو با دسترسی administrator باز کن: |
| ```powershell |
| wsl --install -d Ubuntu |
| ``` |
| اگه خواست ریستارت کن، بعد Ubuntu رو از منوی Start باز کن و یوزرنیم و پسورد بذار. چک کن نسخهت ۲ باشه: |
| ```powershell |
| wsl --version |
| wsl --list --verbose |
| ``` |
| ## ۲. منابع کافی بهش بده |
| WSL خودش یه سهمی از RAM و هستهها برمیداره. خودت توی `C:\Users\<you>\.wslconfig` تعیینش کن. اینا عددهای واقعی منه، واسه لپتاپی با RAM زیاد. به نسبت سیستم خودت تغییرشون بده. |
| ```ini |
| [wsl2] |
| processors=12 |
| memory=20971520000 |
| swap=8388608000 |
| ``` |
| یعنی حدود ۱۹.۵ گیگ RAM و ۷.۸ گیگ swap. با این دستور اعمال میشه: |
| ```powershell |
| wsl --shutdown |
| ``` |
| ## ۳. پروژه رو داخل لینوکس نگه دار |
| این همون قدمیه که همه جا میندازن. پروژه رو توی home لینوکس clone کن، نه توی `/mnt/c`. |
| ```bash |
| cd ~ |
| git clone <your-repo-url> |
| ``` |
| فایلهای `/mnt/c` برای هر خوندن از یه پل تا Windows رد میشن. نصب پکیج و اجرای تست کند میشه و file watcherها ممکنه تغییرها رو نبینن. داخل `~` یه filesystem واقعی لینوکس داری. |
| ## ۴. ادیتورت رو همونجا باز کن |
| اکستنشن WSL رو توی VS Code یا Cursor نصب کن و داخل پروژه اینو بزن: |
| ```bash |
| code . |
| ``` |
| پنجرهی ادیتور روی Windows میمونه، ولی ترمینال و language serverها و اکستنشنها توی لینوکس اجرا میشن، همونجایی که پروژه و agentت هستن. |
| ## ۵. همون پروژه، این بار بالا میاد |
| ```bash |
| curl -LsSf https://astral.sh/uv/install.sh | sh |
| cd ~/sina_codes/website/backend |
| uv run gunicorn sina.asgi:application -c gunicorn.conf.py |
| ``` |
| ```text |
| [INFO] Starting gunicorn 26.2.0 |
| [INFO] Using worker: uvicorn_worker.UvicornWorker |
| ``` |
| ## agent رو هم همینجا اجرا کن |
| ```bash |
| curl -fsSL https://claude.ai/install.sh | bash |
| cd ~/your-project |
| claude |
| ``` |
| حالا agent همون shellی رو داره که سرورت داره، پس چیزی که براش کار میکنه شانس واقعی داره که روی production هم کار کنه. |





