Meillä on tapaus, jossa haluamme päivittää ja testata Python-moduulia käynnistämättä tulkkia uudelleen. Tämä on erityisen hyödyllistä kehityksen aikana, kun muokkaat moduulitiedostoja ulkoisesti ja haluat muutosten näkyvän välittömästi. Python antaa meille mahdollisuuden ladata aiemmin tuodun moduulin uudelleen käyttämällä reload()-funktiota. Esimerkiksi Jos olet muokannut apuohjelmatiedostoa utils.py skriptin uudelleenlatauksen aikana, voit tuoda päivitetyn sisällön uudelleen käynnistämättä Python-kuorta uudelleen.
Milloin moduuli kannattaa ladata uudelleen?
- Viankorjauksen tai live-testauksen aikana
- Käytettäessä interaktiivisia tulkkeja, kuten IPython tai Jupyter
- Kun kehität laajennuksia tai modulaarisia järjestelmiä
- Ilmoittaa ulkoisiin .py-tiedostoihin tehdyt muutokset käynnistämättä istuntoa uudelleen
Moduulien uudelleenlataus Python 2.x:ssä
Python 2.x:ssä voit suoraan käyttää sisäänrakennettua reload()-funktiota ladataksesi uudelleen aiemmin tuodun moduulin.
Pythonimport mymodule # Modify 'mymodule.py' externally here... reload(mymodule)
Selitys:
- mymodule tuodaan ensin tuontitoiminnolla.
- Kun olet tehnyt ulkoisia muutoksia tiedostoon mymodule.py, kutsu reload(mymodule) lataa päivitetyn version uudelleen käynnistämättä tulkkia uudelleen.
- Ei tarvitse tuoda uudelleen – reload() toimii jo tuodulla moduuliobjektilla.
Moduulien uudelleenlataus Pythonissa 3.0 - 3.3
Python-versioissa 3.0–3.3 sisäänrakennettu reload()-toiminto poistettiin. Sen sijaan sinun on tuotava se imp-moduulista.
Pythonimport mymodule import imp # Modify 'mymodule.py' externally... imp.reload(mymodule)
Selitys:
- Ensimmäinen mymodule tuodaan tavalliseen tapaan.
- Imp-moduuli tarjoaa reload()-funktion tällä versioalueella.
- Muokkauksen jälkeen mymodule.py imp.reload(mymodule) lataa moduulin uudelleen päivitetyillä muutoksilla.
Huomautus: imp-moduuli on vanhentunut Python 3.4:stä lähtien ja korvattu importlib:llä.
Moduulien uudelleenlataus Python 3.4:ssä ja uudemmissa
Python 3.4:stä alkaen suositeltu tapa ladata moduuli uudelleen on käyttää importlib.reload().
Pythonimport mymodule import importlib # Modify 'mymodule.py' externally... importlib.reload(mymodule)
Selitys:
- mymodule tuodaan ensin normaalisti.
- Sitten importlib.reload(mymodule) lataa päivitetyn moduulin uudelleen.
- Tämä on nykyinen ja virallinen tapa ladata moduulit uudelleen Python 3.4+:ssa.
Huomautus: Käytä tätä menetelmää kaikissa nykyaikaisissa Python-skripteissä ja muistikirjoissa, kun testaat moduulimuutoksia.
Voitko purkaa moduulin Pythonissa?
Python ei tällä hetkellä tarjoa sisäänrakennettua tapaa ladata moduulia kokonaan sen jälkeen, kun se on tuotu. Kun moduuli on ladattu muistiin, se pysyy käytettävissä sys.modulesissa, kunnes ohjelma päättyy. Vaikka voit poistaa moduulin sys.modulesista, tämä ei takaa sen täydellistä poistamista muistista tai sitä, että sen viittaukset ovat kadonneet:
Pythonimport mymodule import sys del sys.modules['mymodule']
Tämä poistaa moduulin vain sys.modules-välimuistista. Jos jokin muuttuja tai objekti viittaa edelleen moduuliin, sitä ei pureta kokonaan.
Miksi purkamista ei tueta?
- Python hallitsee moduuleita maailmanlaajuisesti muistissa.
- Dynaaminen purkaminen voi johtaa epäjohdonmukaiseen toimintaan, jos koodisi osissa on edelleen viittauksia vanhaan moduuliin.