Python göreli içe aktarma

Python işlevleri ve meth

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 üst 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 üst düzey paket hatasının ötesinde

Bir göreli içe aktarma, konumunu belirlemek için bir modülün adını kullanır.

Aşağıdaki göreli içe aktarmayı göz önünde bulundurun:

.. import app

Bu, “app” Bu import ifadesini içeren programın yazıldığı klasörün üstündeki dizinden Python modülü.

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örünür:

run.py cake/program/__init__.py cake /program/app.py cake/program/app/__init__.py cake/program/app/program.py

“program.py” dosyasında, Python içe aktarma ifademizi şu şekilde görür:

program içe aktarma uygulamasından

“programdan” mevcut çalışma dizinimizden (görüntülediğ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 güvende hissettiklerini belirtti. Bugün 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örüntülediğ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 yüzden kodumuzu bölmek için modüller kullanıyoruz.


Projemizin dosya yapısı şuna benzer:

app.py __init__.py printer.py app/__init__.py app/program.py

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:

import app.program

Bu standart bir import ifadesidir. app/program.py dosyasının içinde göreli bir import ifademiz var:

from .. import printer

Bu kod, app/ üzerindeki dizinden “printer” dosyasını içe aktarır. app/ üzerindeki dizin, sizin için ana dizindir. r projesi. 

Printer.py dosyamız bir yazdırma ifadesi içerir:

print("Pastayı severim!")

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:


pre>python3 app.py

Bu dosyayı çalıştırdığımızda şu mesajı görüyoruz:

İzleme (en son yapılan arama): Dosya "app.py", satır 1,  app.program Dosyasını içe aktar "/Users/James/cake/app/program.py", satır 1,  from .. import printer ValueError: üst düzey paketin ötesinde göreli içe aktarma denendi

Program.py dosyamız “yazıcımızı” modülü.




Çözüm

“yazıcı” “app.program” dosya. Bu bir sorun çünkü “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.

Tüm dosyalarımızı taşıyalım, app.py hariç, yeni bir klasöre:

app.py cake/__init__.py cake /printer.py cake/app/__init__.py cake/app/program.py

app.py dışındaki tüm proje dosyalarımız “cake&rdquo adlı yeni bir klasördedir. ;. app.py dosyamızı “cake” modül:

cake.app.programı içe aktar

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!"

Venus, Rockbot'ta Yazılım Mühendisi

< p>Kodumuzu çalıştıralım ve ne olduğunu görelim:

Pastayı severim!

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 yürütüldü.




Sonuç

göreli içe aktarmada üst düzey paket hatasının ötesinde hatası, içe aktardığınız dosya bir paketin parçası olmadan göreli bir içe aktarma kullandığınızda oluşur. Bu hatayı düzeltmek için, nispeten içe aktardığınız dizinlerin kendi paketleri.

Artık ihtiyaç duyduğunuz kaynaklara sahipsiniz. Bu yaygın Python hatasını bir profesyonel gibi yaşayın!





Python göreli içe aktarma: StackOverflow Questions

Tutorials