فارسی (Farsi)
€EUR

پایتون، pip و محیط‌های مجازی روی VPS با Ubuntu 24.04

2 min
سرور مجازی (VPS/VDS)

Ubuntu 24.04 با Python 3.12 عرضه می‌شود، اما نصب بسته با pip به‌صورت مستقیم اکنون با خطای «externally-managed-environment» شکست می‌خورد. راه‌حل، جدا کردن هر پروژه در محیط مجازی مخصوص خودش است. این راهنما نشان می‌دهد چگونه VPS Linux Infrawire را آماده کنید، وابستگی‌ها را درست مدیریت کنید و برنامه را به‌صورت سرویس systemd پایدار نگه دارید.

📋 پیش‌نیازها

  • یک VPS با Ubuntu 24.04 یا Debian 12 و دسترسی SSH با کاربر root (آی‌پی و گذرواژه root در بخش مشتریان شما موجود است)
  • یک پروژه پایتون یا یک اسکریپت ساده برای آزمایش
  • آشنایی پایه با خط فرمان

1. نصب Python 3، pip و venv

Python 3 معمولاً از قبل نصب است، اما pip و ماژول venv بسته‌های جداگانه‌ای هستند.

Bash
apt update apt install -y python3 python3-pip python3-venv python3-dev build-essential python3 --version pip3 --version

2. درک خطای PEP 668

اجرای pip install requests با کاربر root روی Ubuntu 24.04 یا Debian 12 این پیام را نشان می‌دهد:

TEXT
error: externally-managed-environment

این محافظت (PEP 668) مانع می‌شود pip فایل‌های تحت مدیریت apt را بازنویسی کند و ابزارهای سیستم را خراب کند. آن را با --break-system-packages دور نزنید. یکی از سه روش تمیز زیر را به کار ببرید.

3. ساخت یک محیط مجازی

محیط مجازی یک نسخه خصوصی از Python و pip برای یک پروژه است.

Bash
mkdir -p /opt/myapp && cd /opt/myapp python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install requests flask gunicorn

اکنون اعلان خط فرمان با (venv) شروع می‌شود. با deactivate از محیط خارج شوید.

4. مدیریت وابستگی‌ها با requirements.txt

نسخه‌های دقیق را ثبت کنید تا بتوانید پروژه را روی سرور دیگر دقیقاً مثل قبل بازسازی کنید.

Bash
pip freeze > requirements.txt # روی یک ماشین تازه python3 -m venv venv source venv/bin/activate pip install -r requirements.txt

5. نصب ابزارهای خط فرمان با pipx

برای ابزارهای مستقل (httpie، yt-dlp، black و غیره)، pipx به هرکدام یک محیط مجازی پنهان جداگانه می‌دهد و دستور را به‌صورت سراسری در دسترس قرار می‌دهد.

Bash
apt install -y pipx pipx ensurepath pipx install httpie

پس از آن یک پوسته جدید باز کنید تا PATH به‌روزشده بارگذاری شود. برای کتابخانه‌ای که بسته Debian دارد، apt install python3-requests هم گزینه‌ای معتبر است.

6. اجرای برنامه به‌صورت سرویس systemd

یک کاربر اختصاصی بدون دسترسی ویژه بسازید، سپس یک unit بنویسید که مفسر محیط مجازی را اجرا کند (اینجا Gunicorn که شیء Flask با نام app را در app.py سرو می‌کند).

Bash
useradd --system --home /opt/myapp --shell /usr/sbin/nologin myapp chown -R myapp:myapp /opt/myapp

فایل /etc/systemd/system/myapp.service را بسازید:

INI
1[Unit] 2Description=My Python application 3After=network.target 4 5[Service] 6User=myapp 7WorkingDirectory=/opt/myapp 8ExecStart=/opt/myapp/venv/bin/gunicorn --bind 127.0.0.1:8000 app:app 9Restart=on-failure 10RestartSec=5 11 12[Install] 13WantedBy=multi-user.target
Bash
systemctl daemon-reload systemctl enable --now myapp

برای انتشار برنامه در اینترنت، یک پراکسی معکوس مانند nginx جلوی پورت 8000 قرار دهید.

✅ بررسی

Bash
which python # هنگام فعال بودن باید به داخل /opt/myapp/venv اشاره کند pip list systemctl status myapp --no-pager journalctl -u myapp -n 50 --no-pager curl -I http://127.0.0.1:8000

🔧 عیب‌یابی

The virtual environment was not created successfully because ensurepip is not available : بسته venv نصب نیست. آن را با apt install python3-venv (یا python3.12-venv) نصب کنید و دستور را دوباره اجرا کنید.

status=203/EXEC در systemd : مسیر ExecStart اشتباه است یا فایل برای کاربر سرویس قابل اجرا نیست. با ls -l /opt/myapp/venv/bin/gunicorn و مالکیتی که قبلاً تنظیم کردید بررسی کنید.

ModuleNotFoundError فقط زیر systemd : سرویس به‌جای محیط مجازی از پایتون سیستم استفاده می‌کند. در ExecStart همیشه /opt/myapp/venv/bin/python یا فایل اجرایی داخل venv/bin را فراخوانی کنید.

pip: command not found : از python3 -m pip استفاده کنید یا ابتدا محیط مجازی را فعال کنید.


🎉 پروژه‌های پایتون شما اکنون ایزوله، تکرارپذیر و به‌صورت یک سرویس قابل اعتماد در حال اجرا هستند!

با آخرین پیشنهادها، تخفیف‌ها و تبلیغات ویژه به‌روز بمانید.

مشاهده تخفیف‌ها

ما از کوکی استفاده می‌کنیم

ما از کوکی‌های تحلیلی برای بهبود تجربه شما در سایت خود استفاده می‌کنیم. هیچ داده‌ای به اشخاص ثالث فروخته نمی‌شود. اطلاعات بیشتر در سیاست حفظ حریم خصوصی ما.