Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. PATH aslida nima
- 2.2. PATH qayerdan keladi
- 2.3. Nega o'zgartirish darhol ishlamaydi
- 2.4. Windows: PATH ni qo'lda o'zgartirish
- 2.5. macOS / Linux: PATH ni qo'lda o'zgartirish
- 2.6. Tashxis: qaysi dastur ishlayapti
- 2.7. pip install ishladi, lekin import ishlamaydi
- 2.8. PATH ni umuman tegmasdan ishlash
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — PATH ni chiroyli ko'rish
- Misol 2 — "pip boshqa, python boshqa" muammosini ko'rish
- Misol 3 — PATH ni Pythonning o'zidan qidirish
- Misol 4 — venv PATH ni qanday o'zgartirishini ko'rish
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
2.3-dars: PATH nima va nega muammo beradi
2-QISM — MUHIT VA VOSITALAR · 3-dars
1. Kirish va motivatsiya
Bu darsni o'tkazib yuborish vasvasasi katta. "PATH — shunchaki papkalar ro'yxati, tushundim, davom etaylik."
Lekin statistika boshqacha gapiradi. Boshlovchi dasturchilar Stack Overflow'da so'raydigan savollarning eng ko'p uchraydigan turkumi — muhit muammolari. Va ularning aksariyati bitta ildizga borib taqaladi: PATH.
'python' is not recognized
'pip' is not recognized
command not found: python3
Bu men o'rnatgan versiya emas!
pip install qildim, lekin import ishlamayaptiBeshtasi ham — PATH.
1.8-darsda PATH bilan tanishdik: OT dasturlarni shu ro'yxatdan qidiradi. Bu darsda undan ancha uzoqroqqa boramiz:
- PATH qanday tuzilgan va u qayerdan keladi
- uni doimiy o'zgartirish (Windows va Unix'da)
- nega o'zgartirish darhol ishlamaydi
where/whichbilan tashxis qo'yish- va eng muhimi: PATH ni umuman tegmasdan ko'p muammoni chetlab o'tish usuli
Bu dars — muammolarga qarshi emlash. Bir marta tushunsangiz, umr bo'yi vaqt tejaysiz.
2. Nazariya — chuqur tushuntirish
2.1. PATH aslida nima
PATH — bu muhit o'zgaruvchisi (environment variable). Muhit o'zgaruvchilari — operatsion tizim har bir jarayonga beradigan nom-qiymat juftliklari.
PATH ning qiymati — ajratgich bilan bo'lingan papkalar ro'yxati:
Windows (ajratgich — nuqtali vergul ;):
C:\Windows\system32;C:\Windows;C:\Users\Siz\...\Python312\;C:\Users\Siz\...\Python312\Scripts\macOS / Linux (ajratgich — ikki nuqta :):
/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinTerminalda python deb yozganingizda OT quyidagini qiladi:
1. "python" da yo'l belgisi (/ yoki \) bormi?
HA → aynan shu yo'ldan izla, PATH ga qaramaydi
YO'Q → 2-qadam
2. PATH dagi 1-papkani ol → ichida "python" bormi?
HA → ishga tushir, TO'XTA
YO'Q → keyingi papkaga o't
3. Papkalar tugadi → "command not found"Uchta muhim xulosa:
- Tartib muhim. Birinchi topilgan g'olib. Ikkinchisi hech qachon ishlamaydi.
- Qidiruv rekursiv emas. Faqat papkaning o'zida qaraydi, ichki papkalarga kirmaydi.
- Yo'l ko'rsatilsa, PATH chetlab o'tiladi.
./main.pyyoki/usr/bin/python3— to'g'ridan-to'g'ri.
2.2. PATH qayerdan keladi
PATH o'z-o'zidan paydo bo'lmaydi. U bir necha manbadan yig'iladi.
Windows
Ikki daraja bor:
| Daraja | Qayerda | Kimga ta'sir qiladi |
|---|---|---|
| Tizim (System) | Registry: HKLM\...\Environment |
Barcha foydalanuvchiga |
| Foydalanuvchi (User) | Registry: HKCU\Environment |
Faqat sizga |
Yakuniy PATH = Tizim PATH + Foydalanuvchi PATH (shu tartibda).
Muhim natija: tizim PATH da python bo'lsa, foydalanuvchi PATH dagisiga navbat kelmaydi.
macOS / Linux
PATH qobiq (shell) sozlama fayllarida quriladi:
| Qobiq | Fayl | Qachon o'qiladi |
|---|---|---|
| bash | ~/.bashrc |
Har interaktiv terminal ochilganda |
| bash | ~/.bash_profile |
Login qilganda |
| zsh (macOS sukut) | ~/.zshrc |
Har interaktiv terminal ochilganda |
| barchasi | /etc/profile, /etc/paths |
Tizim darajasida |
Odatiy yozuv:
export PATH="/yangi/papka:$PATH"$PATH — eski qiymat. Yangi papkani oldiga qo'yish uni ustuvor qiladi, oxiriga qo'yish — zaxira qiladi:
export PATH="/yangi:$PATH" # oldin qidiriladi — ustuvor
export PATH="$PATH:/yangi" # oxirida qidiriladi — zaxira2.3. Nega o'zgartirish darhol ishlamaydi
Bu — eng chalkashtiradigan jihat.
PATH ni Windows sozlamalarida o'zgartirdingiz. Ochiq turgan terminalda python yozdingiz. Baribir not recognized.
Sabab: muhit o'zgaruvchilari jarayonga u boshlanayotganda nusxalanadi. Keyin ular o'sha jarayonning shaxsiy nusxasi bo'lib qoladi.
Windows registrida PATH o'zgardi
│
│ (ochiq terminalga TA'SIR QILMAYDI)
↓
Yangi terminal ochildi
│
│ registrdan PATH ning YANGI nusxasini oldi
↓
Endi python topiladi1.8-darsdagi 5-bosqichni eslang: OT jarayon yaratganda unga muhitni uzatadi. Bu — bir martalik uzatish, doimiy bog'lanish emas.
Amaliy qoida: PATH ni o'zgartirgandan keyin:
- Windows: terminalni yoping va yangidan oching. VS Code'ni ham butunlay yopib qayta oching
- Unix:
source ~/.zshrcyoki yangi terminal
Unix'dagi qo'shimcha tuzoq: bash va zsh topilgan buyruqlarni keshlaydi. PATH to'g'ri bo'lsa ham eski javob qaytishi mumkin:
hash -r # keshni tozalash2.4. Windows: PATH ni qo'lda o'zgartirish
Grafik usul (tavsiya etiladi)
1. Win tugmasi → "environment" deb yozing
2. "Edit the system environment variables" ni tanlang
3. "Environment Variables..." tugmasi
4. Yuqoridagi ro'yxatda (User variables) "Path" ni tanlang → Edit
5. "New" → papka yo'lini yozing
6. Kerak bo'lsa "Move Up" bilan tartibni o'zgartiring
7. OK → OK → OK
8. Terminalni YANGIDAN ochingPython uchun ikkita yo'l qo'shiladi:
C:\Users\Siz\AppData\Local\Programs\Python\Python312\
C:\Users\Siz\AppData\Local\Programs\Python\Python312\Scripts\Ikkinchisi (Scripts\) — pip, black, ruff kabi vositalar shu yerda. Uni unutish — keng tarqalgan xato.
Yo'lni qanday bilish?
py -c "import sys; print(sys.prefix)"Bu asosiy papkani beradi. Scripts\ — uning ichida.
Vaqtinchalik o'zgartirish (faqat shu terminal uchun, sinash uchun qulay):
set PATH=C:\yangi\papka;%PATH%Terminal yopilganda yo'qoladi. Xavfsiz sinov usuli.
2.5. macOS / Linux: PATH ni qo'lda o'zgartirish
1-qadam: qaysi qobiq ishlayotganini bilish
echo $SHELL/bin/zsh → ~/.zshrc
/bin/bash → ~/.bashrc2-qadam: faylga qo'shish
# zsh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc>> — faylning oxiriga qo'shish. Bitta > yozsangiz butun faylni o'chirib yuborasiz. Diqqat.
3-qadam: tekshirish
echo $PATH | tr ':' '\n'~/.local/bin nima? pip install --user bilan o'rnatilgan vositalar shu yerga tushadi. Ko'p tizimda u PATH da bo'lmaydi va natijada:
WARNING: The script black is installed in '/home/siz/.local/bin'
which is not on PATH.Yuqoridagi buyruq aynan shuni tuzatadi.
2.6. Tashxis: qaysi dastur ishlayapti
Windows
where pythonC:\Users\Siz\AppData\Local\Programs\Python\Python312\python.exe
C:\Users\Siz\AppData\Local\Microsoft\WindowsApps\python.exeIkkita! Birinchisi ishlaydi. Ikkinchisi — Store taxallusi (2.1-darsdagi tuzoq).
macOS / Linux
which python3 # birinchi topilganini
which -a python3 # BARCHASINI
type -a python3 # taxallus va funksiyalarni hamtype -a which dan kuchliroq — u qobiq taxalluslarini (alias) ham ko'rsatadi:
python3 is an alias for python3.12
python3 is /opt/homebrew/bin/python3
python3 is /usr/bin/python3Har ikkala tizimda ishlaydigan universal usul:
py -c "import sys; print(sys.executable)" # Windows
python3 -c "import sys; print(sys.executable)" # UnixBu — eng ishonchli javob, chunki uni Pythonning o'zi aytyapti.
2.7. pip install ishladi, lekin import ishlamaydi
Bu — chalkashtiradigan klassik holat va u to'g'ridan-to'g'ri PATH bilan bog'liq.
$ pip install requests
Successfully installed requests-2.32.3
$ python main.py
ModuleNotFoundError: No module named 'requests'Sabab: pip va python — turli Pythonlarga tegishli.
pip → /usr/local/bin/pip → Python 3.11 ga tegishli
python → /usr/bin/python3 → Python 3.9
pip 3.11 ga o'rnatdi, python 3.9 da qidiryapti. Topilmaydi.Tashxis:
which pip
which python3
python3 -m pip --versionOxirgi buyruq javobidagi yo'l which pip javobiga mos kelmasa — muammo shu.
Yechim — universal qoida:
python3 -m pip install requests # Unix
py -m pip install requests # Windows-m "shu Pythonning moduli sifatida ishga tushir" degani. Shunda pip va python doim bir xil bo'ladi.
Bu — kursning eng foydali amaliy maslahatlaridan biri. Odat qiling:
pipemas,python -m pip.
2.8. PATH ni umuman tegmasdan ishlash
Eng yaxshi PATH muammosi — umuman yuz bermagani. Uchta usul:
1. Windows'da py ishlating
py.exe C:\Windows\ da turadi, u yer esa PATH da doim bor. Python PATH ga qo'shilmagan bo'lsa ham py ishlaydi.
2. Har doim -m orqali chaqiring
py -m pip install ...
py -m venv muhit
python3 -m http.serverScripts\ yoki bin/ PATH da bo'lmasa ham ishlaydi.
3. Virtual muhit ishlating
python3 -m venv muhit
source muhit/bin/activate # Unix
muhit\Scripts\activate # Windowsactivate nima qiladi? U PATH ning boshiga muhit papkasini qo'shadi:
Faollashtirishdan oldin:
/usr/bin:/bin
Keyin:
/loyiha/muhit/bin:/usr/bin:/bin
└────────────────┘ yangi, birinchiEndi python, pip — hammasi muhitniki. deactivate eski PATH ni qaytaradi.
venv — sehr emas, u shunchaki PATH ni boshqaradi. Shuning uchun bu dars uni tushunishga kalit beradi.
3. Tez ma'lumotnoma
Ko'rish
Windows: echo %PATH% yoki $env:PATH (PowerShell)
Unix: echo $PATH | tr ':' '\n'Tashxis
Windows: where python
Unix: which -a python3 / type -a python3
Har ikkala: python3 -c "import sys; print(sys.executable)"Vaqtinchalik qo'shish
Windows: set PATH=C:\yangi;%PATH%
Unix: export PATH="/yangi:$PATH"Doimiy qo'shish
Windows: Win → "environment" → Edit → Path → New
Unix: echo 'export PATH="/yangi:$PATH"' >> ~/.zshrc && source ~/.zshrcOltin qoidalar
1. O'zgartirgach — terminalni YANGIDAN oching
2. pip emas — python -m pip
3. Windows'da python emas — py
4. Loyihada — venv4. Batafsil misollar
Misol 1 — PATH ni chiroyli ko'rish
Unix:
echo $PATH | tr ':' '\n' | nl 1 /opt/homebrew/bin
2 /usr/local/bin
3 /usr/bin
4 /binnl raqamlaydi — tartibni ko'rish oson.
Windows (PowerShell):
$env:PATH -split ';'Python bilan (ikkala tizimda ham ishlaydi):
import os
for i, papka in enumerate(os.environ["PATH"].split(os.pathsep), 1):
print(f"{i:2}. {papka}")os.pathsep — tizimga mos ajratgich (; yoki :). Bu kod har ikkala tizimda ishlaydi.
Nima ko'rsatdi: 2.1 va 2.2-bo'limlar. Tartibni ko'rish — tashxisning birinchi qadami.
Misol 2 — "pip boshqa, python boshqa" muammosini ko'rish
import sys
import subprocess
print("Python:", sys.executable)
# pip qaysi Pythonga tegishli?
natija = subprocess.run(
["pip", "--version"],
capture_output=True,
text=True,
)
print("pip:", natija.stdout.strip())Natija:
Python: /usr/bin/python3
pip: pip 24.2 from /usr/local/lib/python3.11/site-packages/pip (python 3.11)Muammo ko'rinib turibdi: python3 — 3.9 (/usr/bin), pip esa 3.11 ga tegishli.
Bu holda pip install requests 3.11 ga o'rnatadi, python3 main.py esa 3.9 da qidiradi va topa olmaydi.
Yechim:
python3 -m pip install requestsNima ko'rsatdi: 2.7-bo'lim. Bu — eng ko'p vaqt yeydigan chalkashlik.
Misol 3 — PATH ni Pythonning o'zidan qidirish
import shutil
for nom in ["python", "python3", "pip", "pip3", "git", "code"]:
yol = shutil.which(nom)
holat = yol if yol else "topilmadi"
print(f"{nom:8} → {holat}")Natija:
python → topilmadi
python3 → /opt/homebrew/bin/python3
pip → topilmadi
pip3 → /opt/homebrew/bin/pip3
git → /usr/bin/git
code → /usr/local/bin/codeshutil.which — which buyrug'ining Python varianti. U ikkala tizimda ham ishlaydi va skriptlarda juda foydali.
Nima ko'rsatdi: 2.6-bo'lim va 2.5-darsdagi python vs python3 farqi.
Misol 4 — venv PATH ni qanday o'zgartirishini ko'rish
# Faollashtirishdan OLDIN
echo $PATH | head -c 60/opt/homebrew/bin:/usr/local/bin:/usr/bin:/binpython3 -m venv muhit
source muhit/bin/activate
# Faollashtirishdan KEYIN
echo $PATH | head -c 80/home/siz/loyiha/muhit/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin
└──────────────────────┘ yangi, eng oldindawhich python/home/siz/loyiha/muhit/bin/pythondeactivate
which python3/opt/homebrew/bin/python3Xulosa: venv faqat bitta ish qildi — PATH ning boshiga o'z papkasini qo'ydi. Va shu bilan barcha muammoni hal qildi.
Nima ko'rsatdi: 2.8-bo'lim. venv ning ichki mexanizmi — bu 18-qismning poydevori.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "PATH — bitta ro'yxat" | Windows'da ikkita (tizim + foydalanuvchi), Unix'da bir necha fayldan yig'iladi |
| "PATH ni o'zgartirsam darhol ishlaydi" | Faqat yangi jarayonlarda. Terminalni qayta oching |
| "Tartib muhim emas" | Juda muhim. Birinchi topilgan g'olib, ikkinchisi hech qachon ishlamaydi |
| "PATH ichki papkalarni ham qaraydi" | Yo'q, faqat papkaning o'zini |
"pip va python doim mos" |
Umuman yo'q. python -m pip yozing |
"venv — murakkab sehr" |
U shunchaki PATH ni o'zgartiradi. Shundan boshqa hech narsa |
| "PATH ga hamma narsani qo'shsam yaxshi" | Uzun PATH sekinlashtiradi va chalkashlik keltiradi |
"sudo PATH muammosini hal qiladi" |
Aksincha — sudo boshqa PATH ishlatadi va muammoni chuqurlashtiradi |
6. Keng tarqalgan xatolar va yechimlari
1. O'zgartirdim, lekin ishlamayapti
Sabab: eski terminal eski PATH nusxasini ushlab turibdi (2.3-bo'lim).
Yechim: terminalni yangidan oching. Unix'da source ~/.zshrc va hash -r. VS Code'ni butunlay yoping va qayta oching.
2. where python ikkita yo'l ko'rsatyapti
Sabab: bir nechta Python o'rnatilgan.
Yechim: keraksizini PATH dan olib tashlang yoki keraklisini "Move Up" bilan yuqoriga ko'taring. Windows'da Store taxalluslarini o'chiring (2.1-dars).
3. The script X is installed in ... which is not on PATH
Sabab: pip install --user ~/.local/bin yoki Scripts\ ga o'rnatdi, u PATH da yo'q.
Yechim: o'sha papkani PATH ga qo'shing (2.4/2.5-bo'lim). Yoki python -m X bilan chaqiring.
4. ~/.zshrc ni tahrirlab, terminalni buzib qo'ydim
Sabab: > o'rniga >> yozish kerak edi, yoki $PATH ni unutdingiz:
export PATH="/yangi" # XATO — hamma narsa yo'qoladi
export PATH="/yangi:$PATH" # TO'G'RIYechim: terminal ochiq bo'lsa, vaqtincha tiklang:
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"Keyin faylni tuzating.
5. sudo python boshqa versiyani ishlatyapti
Sabab: sudo xavfsizlik uchun PATH ni tozalaydi (secure_path).
Yechim: to'liq yo'l bering — sudo /usr/bin/python3 .... Yoki umuman sudo ishlatmang (2.2-dars).
6. VS Code terminali boshqa Pythonni ko'rsatyapti
Sabab: VS Code ishga tushganda PATH nusxasini olgan, keyin siz uni o'zgartirgansiz.
Yechim: VS Code'ni butunlay yoping (Cmd/Ctrl+Q) va qayta oching. Faqat oynani yopish yetarli emas.
7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 2.4-dars: terminal buyruqlari —
where,which,echo - 2.6-dars: VS Code'da interpretator tanlash — u ham PATH ga tayanadi
- 18-qism:
venvchuqur — bu darsdagi mexanizmning to'liq qo'llanishi - 18-qism:
pipx— vositalarni izolyatsiyalab, PATH ga to'g'ri qo'shish - 15-qism:
os.environ,shutil.which— muhit bilan koddan ishlash - 28-qism: Docker, CI/CD — u yerda PATH ni o'zingiz quyasiz
- Kelajakdagi har bir muhit muammosi — birinchi tekshiriladigan narsa
8. Eng yaxshi amaliyotlar
pipemas,python -m pip. Bitta odat, o'nlab muammodan xalos qiladi.Windows'da
pyishlating. U PATH ga bog'liq emas.Har loyihada
venv. Global PATH ga tegish ehtiyoji deyarli yo'qoladi.O'zgartirishdan oldin tashxis qo'ying.
where/which -a— birinchi qadam. Ko'r-ko'rona o'zgartirish holatni yomonlashtiradi.PATH ni qisqa tuting. Har bir keraksiz papka — qidiruv sekinlashuvi va potentsial to'qnashuv.
Sinovni vaqtinchalik qiling.
export/setbilan sinang, ishlagach doimiy qiling.~/.zshrcni tahrirlashdan oldin nusxa oling:bashcp ~/.zshrc ~/.zshrc.zaxira
9. Amaliy topshiriq
Vazifa 1: O'z PATH ingizni o'rganish
Tizimingizga mos buyruqni ishlating va javob bering:
Windows: echo %PATH%
Unix: echo $PATH | tr ':' '\n' | nl- Nechta papka bor?
- Nechtasi Pythonga tegishli?
- Ular ro'yxatning boshidami yoki oxirida?
Vazifa 2: Tashxis
Windows: where python && where pip
Unix: which -a python3 && which -a pip3Keyin:
Windows: py -c "import sys; print(sys.executable)"
Unix: python3 -c "import sys; print(sys.executable)"Javoblar mos keldimi? Agar yo'q — nega?
Vazifa 3: pip va python mosligini tekshirish
Windows: py -m pip --version
Unix: python3 -m pip --versionJavobdagi qavs ichida versiya yoziladi: (python 3.12). U python --version bilan bir xilmi?
Vazifa 4: Vaqtinchalik o'zgartirish tajribasi
# Unix
echo $PATH | head -c 40
export PATH="/tmp/sinov:$PATH"
echo $PATH | head -c 40
# Yangi terminal oching va yana tekshiring — o'zgarish bormi?Savol: nega yangi terminalda o'zgarish yo'qoldi?
Javob
export faqat joriy jarayon va uning bolalariga ta'sir qiladi. Yangi terminal — yangi jarayon, u PATH ni sozlama faylidan qayta o'qiydi. Doimiy qilish uchun ~/.zshrc ga yozish kerak (2.5-bo'lim).
Vazifa 5: venv PATH ni qanday o'zgartirishini ko'rish
4-misoldagi tajribani takrorlang: PATH ni faollashtirishdan oldin va keyin solishtiring.
Vazifa 6: Muammo tashxisi
Do'stingiz shikoyat qilyapti:
$ pip install pandas
Successfully installed pandas-2.2.3
$ python analiz.py
ModuleNotFoundError: No module named 'pandas'- Ehtimoliy sabab nima?
- Qaysi uch buyruq bilan tasdiqlaysiz?
- Yechim nima?
Javoblar
pipvapythonturli Python o'rnatmalariga tegishli (2.7-bo'lim)Tasdiqlash:
bashwhich -a python which -a pip python -m pip --version # javobdagi versiyani solishtiringYechim:
bashpython -m pip install pandasYoki eng yaxshisi — virtual muhit yaratib, unda ishlash.
Nimani mustahkamlaydi: butun dars, ayniqsa 2.6, 2.7, 2.8-bo'limlar.
Xulosa
Bu darsda PATH ni chuqur o'rgandik — u qanday tuzilgan, qanday o'zgartiriladi va nega eng ko'p muammo keltiradi.
Eng muhim uch fikr:
PATH — tartiblangan ro'yxat va tartib hal qiluvchi. Birinchi topilgan g'olib. Muammo bo'lsa, birinchi qilinadigan ish —
where/which -abilan tartibni ko'rish.O'zgarish faqat yangi jarayonda ko'rinadi. Terminalni qayta oching. VS Code'ni butunlay yopib oching.
Eng yaxshi PATH muammosi — bo'lmagani.
py,python -m pipvavenvuchligi PATH ga qo'l urish ehtiyojini deyarli yo'qotadi.
Keyingi darsda terminal asoslarini o'rganamiz: cd, ls, mkdir va boshqa buyruqlar. Ular Python o'rganish uchun ham, umuman dasturchi bo'lish uchun ham majburiy ko'nikma.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!