Gdy zapytałem, to najlepsze co możesz zrobić, to
>>> from project.models.user import *
>>> import project # get module reference for reload
>>> reload(project.models.user) # reload step 1
>>> from project.models.user import * # reload step 2
byłoby lepsze i czystsze jeśli użyto modułu obsługi bezpośrednio, zamiast robić import *
(które prawie nigdy nie jest dobry sposób, żeby to zrobić) . Wtedy będzie to tylko
>>> from project.models import user
>>> reload(user)
To by było, co chcesz. Ale nie jest to bardzo miłe. Jeśli naprawdę potrzebujesz przeładowywać moduły tak często, muszę zapytać: dlaczego?
Moje podejrzenie (poparte wcześniejszymi doświadczeniami z ludźmi zadającymi podobne pytania) polega na tym, że testujesz swój moduł. Istnieje wiele sposobów na przetestowanie modułu, a zrobienie go ręcznie w Interaktywnym tłumaczu jest jednym z najgorszych sposobów. Zapisz jedną ze swoich sesji w pliku i użyj doctest
, aby uzyskać szybką naprawę. Alternatywnie, zapisz go jako program i użyj python -i
. Jednak jedynym świetnym rozwiązaniem jest użycie modułu unittest
.
Jeśli to nie jest to, mam nadzieję, że jest coś lepszego, a nie gorszego. Naprawdę nie ma pożytku z reload
(w rzeczywistości jest on usuwany w 3.x). To nie działa skutecznie - możesz przeładować moduł, ale pozostawić resztki z poprzednich wersji. Nie działa nawet na wszystkich rodzajach modułów - moduły rozszerzeń nie ładują się poprawnie, a czasem nawet przerażają po ponownym załadowaniu.
Kontekst korzystania z niego w interpretera interaktywnym nie pozostawia wiele do wyboru, co robisz i jakie jest najlepsze rozwiązanie.Poza tym, czasami ludzie używali reload()
wdrożenie wtyczek itd Jest to niebezpieczne w najlepsze, a często można zrobić inaczej stosując albo exec
(ah zło terytorium znajdujemy się w) lub segregowane proces.
+1: Naprawdę nie ma dobrego wykorzystania przeładowania. –
Co robię, aby znaleźć to pytanie, czy używam konsoli do eksploracji struktury danych importowanej z JSON. Chcę użyć "reload", aby zachować niektóre funkcje w moim edytorze tekstu, które przechodzą przez strukturę na różne sposoby, edytują je, a następnie ponownie uruchamiają, bez konieczności wychodzenia z konsoli. Mimo to, jeśli Python nie może tego obsługiwać w sposób czysty, z powodów związanych z implementacją, takich jak ta niezdolność do usunięcia "resztek", myślę, że muszę się mylić, aby chcieć to zrobić ;-p +1 dla odpowiedzi, która pozwala mi to zrobić, tak czy inaczej, chociaż. –
+1 za pokazanie mi, że naprawdę powinienem pisać testy, zamiast robić rzeczy w interpretatorze ręcznie, nawet w celu precyzyjnego dostrojenia. Byłoby to również użyteczne w przyszłych testach bez regresji. –