Modul importlib

Python oferă pachetul importlib ca parte a bibliotecii de module standard. Sarcina sa este de a furniza implementarea operatorului de import Python, precum și funcția __import __ (). În plus, importlib oferă programatorului posibilitatea de a crea un obiect personalizat (așa-numitul importator) care poate fi utilizat pentru procesul de import.







Dar imp?

Există un alt modul, numit imp, care oferă o interfață pentru mecanismele din spatele declarației de import Python. Acest modul este considerat învechit pentru Python 3.4. Se presupune că importlib ar trebui să fie folosit în locul său.

Acest modul este foarte greu de folosit, așa că ne vom limita orizonturile și vom concentra asupra următoarelor subiecte:

  • Import dinamic
  • Verificați capacitatea de a importa modulul
  • Un modul terț la îndemână numit import_from_github_com

Import dinamic

Modulul importlib acceptă capacitatea de a importa modulul care a fost transmis șirului. Deci, să creăm câteva module simple cu care să putem lucra. Vom da fiecărui modul aceeași interfață, dar le vom afișa numele pentru a vedea diferența dintre ele. Creați două module cu nume diferite, cum ar fi foo.py și bar.py. și adăugați următorul cod la ele:

Aici vom importa modulul importlib și vom crea o funcție foarte simplă numită dynamic_import. Tot ceea ce face această funcție este să sunați la o altă funcție importlib - import_module cu șirul de module pe care l-am transmis și să returnați rezultatul acestui apel. Mai mult, în declarația noastră condițională de mai jos, putem apela metoda principală a fiecărui modul, care afișează în mod corespunzător numele modulului. Probabil că nu veți face acest lucru frecvent în codul dvs., însă este posibil să fie nevoie să importați periodic modulul atunci când este prezentat numai ca un șir. Modulul importlib face posibilă acest lucru.







Verificarea importabilității modulului

Python conține un stil de codare numit EAFP: Mai ușor să ceri iertare decât permisiunea (mai ușor de solicitat iertare decât permisiunea). Aceasta înseamnă că este adesea mai ușor să presupunem că există ceva (de exemplu, cheia în dicționar) și să prindeți eroarea, dacă nu este. Anterior, am încercat să importăm un modul, cu o probabilitate de a obține o eroare de importError. dacă nu există. Ce se întâmplă dacă trebuie să verificăm și să vedem dacă modulul poate fi importat pentru a exclude presupunerile? Puteți realiza acest lucru cu importlib!

print (dir (modul))

Aici vom importa un submodul din importlib numit util. Prima parte a codului check_module conține magie reală pe care o putem vedea. În el, numim funcția find_spec în linia modulului, care a fost transferată mai devreme. Mai întâi efectuăm un transfer de nume fals, apoi facem același lucru, dar cu numele real al modulului Python. Dacă executați acest cod, veți vedea că atunci când treceți numele unui modul dezinstalat, funcția find_spec returnează Niciunul și codul nostru afișează o notificare că modulul nu a fost găsit. Dacă a fost găsit, atunci vom returna specificația modulului. Putem lua această specificație și o vom folosi pentru a importa modulul. Sau puteți trece doar șirul funcției import_module. așa cum am făcut în secțiunea anterioară. Din același motiv, vom lua în considerare utilizarea ca specifică a metodei alternative. Uită-te la funcția import_module_from_spec din codul de mai sus. Este nevoie ca specificația modulului să fie returnată de funcția check_module. Apoi îl transmitem către funcția module_from_spec. care returnează modulul de import. În documentația Python, se recomandă să rulați modulul după import, ceea ce facem cu funcția exec_module. În sfârșit, vom primi modulul și vom rula cu Python pentru a ne asigura că acest modul este așa cum ne-am fi așteptat.

Importați din fișierul sursă

Un submodul din importlib numit util poate face un truc pe care vreau să îl iau în considerare. Aveți posibilitatea să utilizați utilul pentru a importa modulul, utilizând doar calea și numele fișierului. Să luăm în considerare următorul exemplu, astfel încât să înțelegeți ce înseamnă:







Articole similare

Trimiteți-le prietenilor: