Python bilan ishlaydigan har qanday loyiha, xoh u sayt, xoh Telegram bot yoki kunlik hisobot skripti bo'lsin, tashqi kutubxonalarga tayanadi. Lokal kompyuterda ularni pip install bilan o'rnatish oddiy, lekin hostingda tizimga paket o'rnatish huquqingiz bo'lmaydi va bo'lishi ham shart emas. Bu muammoni virtual muhit, ya'ni venv hal qiladi: u loyiha papkasining ichida alohida Python nusxasi va kutubxonalar to'plamini yaratadi. Quyida venv'ni hostingda qanday yaratish, ishlatish va keyinchalik buzilmasligi uchun nimalarga e'tibor berishni tushuntiramiz.
Virtual muhit nima uchun kerak
Serverda bitta umumiy Python bo'lishi mumkin, uning kutubxonalari esa tizim administratori tomonidan boshqariladi. Agar har bir loyiha kutubxonalarni shu umumiy joyga o'rnatsa, bir loyiha uchun yangilangan paket boshqasini buzib qo'yishi hech gap emas. Virtual muhit har bir loyihaga o'zining yopiq "qutisini" beradi: unda o'zining pip buyrug'i, o'zining kutubxona versiyalari va o'zining sozlamalari bo'ladi. Bundan tashqari, venv yaratish uchun administrator huquqi kerak emas, shuning uchun u oddiy hosting foydalanuvchisi uchun ham ochiq.
Misol sifatida Namangandagi nonvoyxonani olaylik. Uning egasi har kuni ertalab kechagi buyurtmalar bo'yicha qisqa hisobotni Telegram orqali olishni xohlaydi. Dasturchi buning uchun kichik Python skript yozdi, u requests va openpyxl kutubxonalaridan foydalanadi. Skript hostingda cron orqali ishlaydi va uning barcha kutubxonalari loyiha ichidagi venv'da turadi.
Venv yaratish va faollashtirish
SSH orqali hostingga kirib, loyiha papkasiga o'ting va virtual muhitni yarating. Agar serverda bir nechta Python versiyasi bo'lsa, kerakli versiyani aniq ko'rsatgan ma'qul, chunki venv qaysi Python bilan yaratilgan bo'lsa, butun umri davomida o'sha versiyada qoladi.
cd ~/report
python3 --version
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
Faollashtirilgandan keyin terminal satri boshida (venv) yozuvi paydo bo'ladi va python hamda pip buyruqlari endi virtual muhitga tegishli bo'ladi. Buni tekshirish oson: which python buyrug'i loyiha ichidagi venv/bin/python yo'lini ko'rsatishi kerak. Ishni tugatgach deactivate buyrug'i bilan oddiy holatga qaytasiz. Windows'da lokal ishlaganda faollashtirish buyrug'i boshqacha, u venv\Scripts\activate ko'rinishida bo'ladi.
Kutubxonalarni requirements.txt orqali boshqarish
Kutubxonalarni bittalab eslab qolish o'rniga, ularning ro'yxatini requirements.txt faylida saqlash qulay. Lokal kompyuterda loyiha tayyor bo'lgach, ro'yxatni yaratasiz, serverda esa undan o'rnatasiz:
# lokal kompyuterda
pip freeze > requirements.txt
# serverda, faollashtirilgan venv ichida
pip install --no-cache-dir -r requirements.txt
pip freeze aniq versiyalarni yozib qo'yadi, shuning uchun serverda ham lokal kompyuterdagi bilan bir xil to'plam o'rnatiladi. --no-cache-dir parametri esa yuklab olingan paketlarni uy katalogidagi keshda saqlamaydi. Hostingda disk hajmi tarif bilan cheklangan va pip keshi sezilarli joy egallashi mumkin, shuning uchun bu parametr foydali. Kesh allaqachon to'planib qolgan bo'lsa, pip cache purge uni tozalaydi.
Venv'ni boshqa kompyuterdan ko'chirib bo'lmaydi
Ko'p uchraydigan xato bu lokal kompyuterda yaratilgan venv papkasini FTP orqali serverga yuklashdir. Virtual muhit ichida uni yaratgan Python'ga mutlaq yo'llar yozilgan bo'ladi, ba'zi kutubxonalar esa aynan shu operatsion tizim uchun kompilyatsiya qilingan fayllarni o'z ichiga oladi. Windows'da yaratilgan venv'da hatto papkalar tuzilishi ham boshqacha. Shuning uchun serverga faqat kod va requirements.txt yuklanadi, venv esa serverning o'zida yaratiladi. Git ishlatsangiz, venv/ qatorini .gitignore fayliga qo'shib qo'ying.
Cron va skriptlarda venv'ni faollashtirmasdan ishlatish
Cron source venv/bin/activate buyrug'ini bajarmaydi va sizning terminal muhitingizni bilmaydi. Lekin buning keragi ham yo'q: virtual muhitdagi Python'ni to'liq yo'l bilan chaqirish kifoya, u o'z kutubxonalarini o'zi topadi. Nonvoyxona hisoboti uchun har kuni soat 7:30 da ishlaydigan cron qatori quyidagicha bo'ladi:
30 7 * * * /home/login/report/venv/bin/python /home/login/report/daily.py >> /home/login/report/daily.log 2>&1
Bu yerda yo'llar namuna sifatida berilgan, o'zingizning uy katalogingizni echo $HOME buyrug'i bilan bilib olishingiz mumkin. Server vaqt mintaqasi O'zbekiston vaqtidan farq qilishi mumkinligini ham hisobga oling va kerak bo'lsa soatni moslang. Oxiridagi yo'naltirish xatolarni log fayliga yozadi, shunda skript ishlamay qolsa, sababini o'sha yerdan topasiz. Oddiy hostingda cron qatorini ISPmanager panelidagi rejalashtiruvchi bo'limida qo'shish mumkin.
Tipik xatolar va ularning yechimi
Ba'zi Debian va Ubuntu tizimlarida venv yaratishda ensurepip is not available degan xato chiqadi. Bu Python'ning venv moduli alohida paket sifatida o'rnatilmaganini bildiradi. O'z VPS serveringizda uni sudo apt install python3-venv bilan o'rnatasiz, oddiy hostingda esa buni texnik yordamdan so'rash kerak bo'ladi. Python versiyasi yangilangandan keyin eski venv ishlamay qolishi mumkin; bunday holda venv papkasini o'chirib, uni yangidan yaratish va requirements.txt dan qayta o'rnatish eng tez yo'l.
Shuni ham yodda tuting: hostingda Python skriptlarini ishga tushirish imkoniyati, SSH kirish va mavjud Python versiyalari tarifga bog'liq. Buni sayt.uz kabinetidan yoki texnik yordam orqali aniqlab oling. Bir martalik yoki rejalashtirilgan skriptlar uchun oddiy hosting yetarli bo'lishi mumkin, lekin kun bo'yi to'xtovsiz ishlashi kerak bo'lgan bot yoki xizmat uchun VPS ancha ishonchli tanlov hisoblanadi.