Python göreli içe aktarma
Python işlevleri ve meth
Michael Zippo
18.11.2021
Bir Python projesinin içinde nispeten paketleri içe aktarabilirsiniz. Bir paketi g√∂receli olarak içe aktarƒ±rken bir hata yaparsanƒ±z, g√∂reli içe aktarmada ust seviyenin √∂tesinde paket hatasƒ±
hatasıyla karşılaşırsınız.
Bu kƒ±lavuzda, Bu hatanƒ±n ne anlama geldiƒüini ve neden ortaya 烱ktƒ±ƒüƒ±nƒ± tartƒ±≈üacaƒüƒ±z. Projenizde bir g√∂reli içe aktarma ifadesini nasƒ±l ba≈üarƒ±lƒ± bir ≈üekilde yazacaƒüƒ±nƒ±zƒ± √∂ƒürenmenize yardƒ±mcƒ± olmak için bu hatanƒ±n bir √∂rneƒüini inceleyeceƒüiz.
g√∂reli içe aktarmada ust duzey paket hatasƒ±nƒ±n √∂tesinde
Bir g√∂reli içe aktarma, konumunu belirlemek için bir modulun adƒ±nƒ± kullanƒ±r.
A≈üaƒüƒ±daki g√∂reli içe aktarmayƒ± g√∂z √∂nunde bulundurun:
Bu, "app‚" Bu import ifadesini içeren programƒ±n yazƒ±ldƒ±ƒüƒ± klas√∂run ustundeki dizinden Python modulu.
Diyelim ki bu dosyanƒ±n adƒ± "program.py‚" ve "app‚" adlƒ± bir klas√∂rde bulunuyordu. Ana projemizin adƒ± "kek‚". Dosya yapƒ±mƒ±z ≈ü√∂yle g√∂runur:
"program.py‚" dosyasƒ±nda, Python içe aktarma ifademizi ≈üu ≈üekilde g√∂rur:
"programdan‚" mevcut çalƒ±≈üma dizinimizden (g√∂runtulediƒüimiz klas√∂r) deƒüil, bir klas√∂r.
Katƒ±lƒ±mcƒ±larƒ±n %81’i, bir eƒüitim kampƒ±na katƒ±ldƒ±ktan sonra teknik i≈ü beklentileri konusunda kendilerini daha guvende hissettiklerini belirtti. Bugun bir eƒüitim kampƒ± ile e≈üle≈üin.
Ortalama bir eƒüitim kampƒ± mezunu, bir eƒüitim kampƒ±na ba≈ülamaktan ilk i≈üini bulmaya kadar, kariyer geçi≈üinde altƒ± aydan az zaman harcadƒ±.
Bunun nedeni "program&rdquo ; g√∂runtulediƒüimiz dizinin arkasƒ±ndaki iki dizindir. __init__.py dosyalarƒ± Python’a kendi Python paketlerimizle çalƒ±≈ütƒ±ƒüƒ±mƒ±zƒ± s√∂yler. Bu dosya her iki durumda da bo≈ütur.
Programlarınız bu yapıyı kullanmalıdır, aksi halde bir hatayla karşılaşırsınız.
Örnek Senaryo
"kek‚" hangi "Pasta severim!‚" ifadesinin 烱ktƒ±sƒ±nƒ± alƒ±r. konsola. Bu proje daha karma≈üƒ±k hale gelecek, bu yuzden kodumuzu b√∂lmek için moduller kullanƒ±yoruz.
Projemizin dosya yapısı şuna benzer:
Bu kodun tamamƒ± "cake&rdquo adlƒ± bir klas√∂rdedir ;. app.py dosyamƒ±zƒ±n içinde program.py dosyamƒ±zƒ± içe aktaran bir ifademiz var:
Bu standart bir import ifadesidir. app/program.py dosyasƒ±nƒ±n içinde g√∂reli bir import ifademiz var:
Bu kod, app/ uzerindeki dizinden "printer‚" dosyasƒ±nƒ± içe aktarƒ±r. app/ uzerindeki dizin, sizin için ana dizindir. r projesi.
Printer.py dosyamƒ±z bir yazdƒ±rma ifadesi içerir:
Let‚Äô √áalƒ±≈üƒ±p çalƒ±≈ümadƒ±ƒüƒ±nƒ± g√∂rmek için programƒ±mƒ±zƒ± çalƒ±≈ütƒ±rmayƒ± deneyin. Projemizin ana dosyasƒ± olduƒüu için app.py dosyamƒ±zƒ± çalƒ±≈ütƒ±racaƒüƒ±z:
Bu dosyayƒ± çalƒ±≈ütƒ±rdƒ±ƒüƒ±mƒ±zda ≈üu mesajƒ± g√∂ruyoruz:
Program.py dosyamƒ±z "yazƒ±cƒ±mƒ±zƒ±‚" modulu.
Çözum
"yazƒ±cƒ±‚" "app.program‚" dosya. Bu bir sorun çunku "yazƒ±cƒ±‚" kendisi bir pakette deƒüil. G√∂receli içe aktarmalar yalnƒ±zca paketler içinde çalƒ±≈üƒ±r.
Bu sorunu ç√∂zmek için projemizin dizin yapƒ±sƒ±nƒ± deƒüi≈ütirmemiz gerekiyor. "yazƒ±cƒ±mƒ±zƒ±‚" dosya ve "uygulamamƒ±z‚" "yazƒ±cƒ±‚" bir paket içindedir. Bu, "yazƒ±cƒ±mƒ±za‚" "app‚" klas√∂r.
app.py dosyamƒ±zƒ± alt dizinlerimize ba≈üvuracaƒüƒ± için mevcut dizininde tutabiliriz.
Tum dosyalarƒ±mƒ±zƒ± ta≈üƒ±yalƒ±m, app.py hariç, yeni bir klas√∂re:
app.py dƒ±≈üƒ±ndaki tum proje dosyalarƒ±mƒ±z "cake&rdquo adlƒ± yeni bir klas√∂rdedir. ;. app.py dosyamƒ±zƒ± "cake‚" modul:
Bu, "programƒ±‚" cake/app dizininde bulunan dosya.
Artƒ±k printer.py dosyamƒ±z kendi paketinde olduƒüuna g√∂re projemizi ba≈üarƒ±yla çalƒ±≈ütƒ±rabiliriz. bir paketin içindeler.
"Python.Engineering hayatƒ±ma en çok ihtiyacƒ±m olduƒüu anda girdi ve hƒ±zlƒ± bir ≈üekilde bir bootcamp ile e≈üle≈ümeme yardƒ±mcƒ± oldu. Mezun olduktan iki ay sonra, hayattaki deƒüerlerim ve hedeflerime uygun hayalimdeki i≈üi buldum!"
Programƒ±mƒ±z konsola "I like cake!‚" mesajƒ±nƒ± ba≈üarƒ±yla yazdƒ±rƒ±r.Bu mesaj daha √∂nce bahsettiƒüimiz gibi printer.py’de tanƒ±mlanmƒ±≈ütƒ±r.
< p>Bu bize program.py dosyamƒ±zƒ±n printer.py dosyasƒ±nƒ± ba≈üarƒ±yla içe aktarabildiƒüini g√∂sterir. Dosyayƒ± içe aktardƒ±ƒüƒ±mƒ±zda içeriƒüi yurutuldu.