Ubuntu 24.04 में Python 3.12 आता है, लेकिन सीधे pip से पैकेज इंस्टॉल करने पर अब “externally-managed-environment” त्रुटि आती है। इसका समाधान है हर प्रोजेक्ट को अपने अलग वर्चुअल एनवायरनमेंट में रखना। यह गाइड दिखाती है कि अपने VPS Linux Infrawire को कैसे तैयार करें, डिपेंडेंसी ठीक से कैसे सँभालें और एप्लिकेशन को systemd सेवा के रूप में लगातार कैसे चलाएँ।
📋 पूर्वापेक्षाएँ
- Ubuntu 24.04 या Debian 12 वाला VPS, जिसमें root SSH एक्सेस हो (IP और root पासवर्ड आपके कस्टमर एरिया में मिलते हैं)
- एक Python प्रोजेक्ट या परीक्षण के लिए कोई सरल स्क्रिप्ट
- कमांड लाइन की बुनियादी जानकारी
1. Python 3, pip और venv इंस्टॉल करें
Python 3 आमतौर पर पहले से इंस्टॉल होता है, लेकिन pip और venv मॉड्यूल अलग पैकेज हैं।
Bashapt update apt install -y python3 python3-pip python3-venv python3-dev build-essential python3 --version pip3 --version
2. PEP 668 त्रुटि को समझें
Ubuntu 24.04 या Debian 12 पर root के रूप में pip install requests चलाने पर यह आता है:
TEXTerror: externally-managed-environment
यह सुरक्षा (PEP 668) pip को apt द्वारा प्रबंधित फ़ाइलें ओवरराइट करने और सिस्टम टूल बिगाड़ने से रोकती है। इसे --break-system-packages से बायपास न करें। नीचे दिए तीन साफ़ तरीकों में से कोई एक अपनाएँ।
3. वर्चुअल एनवायरनमेंट बनाएँ
वर्चुअल एनवायरनमेंट किसी एक प्रोजेक्ट के लिए Python और pip की निजी प्रति है।
Bashmkdir -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 से डिपेंडेंसी सँभालें
सटीक संस्करण फ़्रीज़ करें ताकि प्रोजेक्ट को किसी दूसरे सर्वर पर हू-ब-हू दोबारा बनाया जा सके।
Bashpip freeze > requirements.txt # नई मशीन पर python3 -m venv venv source venv/bin/activate pip install -r requirements.txt
5. pipx से कमांड-लाइन टूल इंस्टॉल करें
स्वतंत्र टूल (httpie, yt-dlp, black आदि) के लिए pipx हर एक को अपना छिपा हुआ वर्चुअल एनवायरनमेंट देता है और कमांड को ग्लोबल रूप से उपलब्ध कराता है।
Bashapt install -y pipx pipx ensurepath pipx install httpie
अपडेट किया गया PATH लोड करने के लिए इसके बाद नया शेल खोलें। जिस लाइब्रेरी का Debian पैकेज मौजूद है, उसके लिए apt install python3-requests भी सही विकल्प है।
6. एप्लिकेशन को systemd सेवा के रूप में चलाएँ
बिना विशेषाधिकार वाला एक समर्पित यूज़र बनाएँ, फिर ऐसी यूनिट लिखें जो वर्चुअल एनवायरनमेंट के इंटरप्रेटर को शुरू करे (यहाँ app.py में app नाम के Flask ऑब्जेक्ट को Gunicorn चला रहा है)।
Bashuseradd --system --home /opt/myapp --shell /usr/sbin/nologin myapp chown -R myapp:myapp /opt/myapp
/etc/systemd/system/myapp.service बनाएँ:
INI1[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
Bashsystemctl daemon-reload systemctl enable --now myapp
ऐप को इंटरनेट पर उपलब्ध कराने के लिए पोर्ट 8000 के आगे nginx जैसा रिवर्स प्रॉक्सी लगाएँ।
✅ जाँच
Bashwhich 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) से इंस्टॉल करें और कमांड दोबारा चलाएँ।
systemd में status=203/EXEC : ExecStart का पथ गलत है या फ़ाइल सेवा-यूज़र के लिए चलने योग्य नहीं है। ls -l /opt/myapp/venv/bin/gunicorn और पहले सेट किए गए स्वामित्व से जाँचें।
केवल systemd के अंतर्गत ModuleNotFoundError : सेवा वर्चुअल एनवायरनमेंट की जगह सिस्टम Python इस्तेमाल कर रही है। ExecStart में हमेशा /opt/myapp/venv/bin/python या venv/bin की बाइनरी बुलाएँ।
pip: command not found : python3 -m pip का उपयोग करें या पहले वर्चुअल एनवायरनमेंट सक्रिय करें।
🎉 आपके Python प्रोजेक्ट अब अलग-थलग, दोहराने योग्य हैं और भरोसेमंद सेवा के रूप में चल रहे हैं!