Mums pateikiamas atvejis, kai norime atnaujinti ir išbandyti Python modulį nepaleidę interpretatoriaus iš naujo. Tai ypač naudinga kuriant, kai modifikuojate modulio failus išoriškai ir norite, kad tie pakeitimai atsispindėtų nedelsiant. Python leidžia iš naujo įkelti anksčiau importuotą modulį naudojant reload() funkciją. Pavyzdžiui Jei redagavote paslaugų failą utils.py, kai scenarijus veikia iš naujo, galite iš naujo importuoti atnaujintą turinį iš naujo nepaleidžiant Python apvalkalo.
Kada reikėtų iš naujo įkelti modulį?
- Derinimo ar tiesioginio testavimo metu
- Kai naudojate interaktyvius vertėjus, tokius kaip IPython arba Jupyter
- Kuriant papildinius ar modulines sistemas
- Atspindėti išoriniuose .py failuose atliktus pakeitimus nepaleidus seanso iš naujo
Modulių perkėlimas Python 2.x
Python 2.x galite tiesiogiai naudoti integruotą reload() funkciją, kad iš naujo įkeltumėte anksčiau importuotą modulį.
Pythonimport mymodule # Modify 'mymodule.py' externally here... reload(mymodule)
Paaiškinimas:
- mymodule pirmą kartą importuojamas naudojant importavimą.
- Atlikus išorinius mymodule.py pakeitimus, iškvietus reload(mymodule) iš naujo įkeliama atnaujinta versija, iš naujo nepaleidžiant vertėjo.
- Nereikia iš naujo importuoti – reload() veikia su jau importuotu modulio objektu.
Modulių įkėlimas iš Python 3.0 į 3.3
Python versijose nuo 3.0 iki 3.3 buvo pašalinta įtaisyta funkcija „reload()“. Vietoj to turite jį importuoti iš imp modulio.
Pythonimport mymodule import imp # Modify 'mymodule.py' externally... imp.reload(mymodule)
Paaiškinimas:
- Pirmiausia mano modulis importuojamas kaip įprasta.
- Šiame versijų diapazone imp modulis suteikia funkciją „reload()“.
- Po redagavimo mymodule.py imp.reload(mymodule) iš naujo įkelia modulį su atnaujintais pakeitimais.
Pastaba: imp modulis nebenaudojamas nuo Python 3.4 ir yra pakeistas importlib.
Modulių perkėlimas Python 3.4 ir naujesnėse versijose
Pradedant nuo Python 3.4, rekomenduojamas būdas iš naujo įkelti modulį yra naudojant importlib.reload().
Pythonimport mymodule import importlib # Modify 'mymodule.py' externally... importlib.reload(mymodule)
Paaiškinimas:
- mymodule pirmą kartą importuojamas įprastai.
- Tada importlib.reload(mymodule) iš naujo įkelia atnaujintą modulį.
- Tai dabartinis ir oficialus būdas iš naujo įkelti modulius Python 3.4+.
Pastaba: naudokite šį metodą visuose šiuolaikiniuose Python scenarijuose ir bloknotuose, kai tikrinate modulio pakeitimus.
Ar galite iškrauti modulį Python?
Šiuo metu „Python“ nesuteikia integruoto būdo visiškai iškrauti modulį, kai jis importuotas. Kai modulis įkeliamas į atmintį, jis lieka prieinamas sys.modules iki programos pabaigos. Nors galite ištrinti modulį iš sys.modules, tai negarantuoja, kad jis bus visiškai pašalintas iš atminties arba kad jo nuorodų nebėra:
Pythonimport mymodule import sys del sys.modules['mymodule']
Tai pašalins modulį tik iš sys.modules talpyklos. Jei koks nors kintamasis ar objektas vis dar nurodo modulį, jis nebus visiškai iškrautas.
Kodėl iškrovimas nepalaikomas?
- Python atmintyje valdo modulius visame pasaulyje.
- Dinaminis iškrovimas gali sukelti nenuoseklų elgesį, jei jūsų kodo dalyse vis dar yra nuorodų į seną modulį.