Potrzebuje zrobić przeładowanie modułu i importlib.reload(nazwa_modulu) działa ale "nazwa_modulu" musi być nazwą modułu :) Chodzi mi o to, że jeśli zrobię coś takiego:
a = nazwa_modulu
importlib.reload(a)
Dostaję błąd, że "a" nie jest prawidłową nazwą modułu. Macie na to jakiś pomysł?
from importlib import reload
import my_module as mm
reload(mm)
Swoją drogą Twoje podstawienie też działa, ale jest mniej pythonowe.
Nie o to chodzi. Chcę zrobić przeładowanie modułu który uległ zmianie więc raz to będzie moduł o nazwie "xyz" innym razem "abc" dlatego funkcja która to sprawdza zwraca w formie zmiennej nazwę modułu który należy przeładować i tu jest problem. Kiedy do funkcji importlib.reload() wprowadzam nazwę zmiennej (która zawiera nazwę modułu) otrzymuję błąd. Ta funkcja z jakiegoś powodu nie chce przyjąć zmiennej a od razu nazwę modułu
No, trzeba było od początku tak napisać. O to Ci chodzi?
import numpy
import scipy
from importlib import reload
x = __import__("numpy")
reload(x)
x = __import__("scipy")
reload(x)
Zrobiłem tak jak podałeś ale nic z tego. Dalej nie widzi modułu. Otrzymuję:
x = __import__(module_name)
ModuleNotFoundError: No module named 'monitor'
W ogóle kiedy wpiszę x = import("monitor") to też wywala mi błąd, że nie rozpoznaje modułu.
Moduł ładuję: from Modules import monitor ale to bez znaczenia bo jak podam "ręcznie" nazwę modułu:
reload(monitor)
to już działa
Musiałbyś pokazać strukturę zawartą w Modules
oraz zawartość __init__.py
. Póki co u siebie nie potrafię odtworzyć podobnego zachowania, a nie bardzo mam czas, by przerabiać wszystkie możliwe scenariusze.
Struktura wygląda tak:
-/Projekt
--/Moduly
--- __init.py__
--- monitor.py
-- start.py
-- __init.py__
Pliki init.py są puste. Plik start.py jest plikiem głównym który ładuje moduł monitor.py z katalogu Moduly za pomocą from Modules import monitor
Ok, u mnie start.py
wygląda tak:
from importlib import reload
x = __import__("modules.monitor")
reload(x)
i gdy wywołam:
python3 start.py
To moduł monitor
jest poprawnie importowany.
No nie działa. Spakowałem te pliki tutaj:
https://megawrzuta.pl/download/471fa1f1690d92e2e84784a1945c849f.html
Zauważyłem jeszcze jedną rzecz. Zmodyfikowałem nieco kod z pliku start.py i wygląda on teraz tak:
x = monitor
importlib.reload(x)
print(x.zmienna)
I działa. Kiedy zmienna x wygląda jak powyżej ona wtedy jest zadeklarowana jako <class 'module'> dlatego działa ale kiedy zmienna x jest typu string już nie działa. Czy da się zmienić typ string na <class 'module'>?