importlib.reload - zmienna z nazwą modułu

0

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ł?

0
from importlib import reload
import my_module as mm

reload(mm)

Swoją drogą Twoje podstawienie też działa, ale jest mniej pythonowe.

0

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

0

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)
0

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

0

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.

0

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

0

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.

0

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'>?

1 użytkowników online, w tym zalogowanych: 0, gości: 1