Co inspect.getmodule(f)
robi wewnętrznie, za inspect.py's sources, jest zasadniczo sys.modules.get(object.__module__)
- Nie nazwałbym tego kodu bezpośrednio za pomocą „wygodniejsze”, choć (poza „zasadniczo” części inspect
ma wiele przydatnych łowienia i korekty futerały narożne).
Dlaczego nie zadzwonić bezpośrednio inspect.getsourcefile(f)?
Edit: czytanie między wierszami, wydaje się, że PO próbuje coś zrobić jak
python /foo/bar/baz/bla.py
iw bla.py
(który jest w ten sposób prowadzony jako __main__
) określenia „co from
lub import
oświadczenie mógł inny główny skrypt do importowania tej funkcji ze mnie? ".
Problem jest, pytanie jest źle postawione, bo nie może być dowolny takie ścieżki wykorzystywane do celów (nic nie gwarantuje ścieżka bieżącego Główny skrypt jest na sys.path
kiedy to inny główny skrypt pobiera uruchomić później), nie może być kilka różnych nich (np zarówno /foo/bar
i /foo/bar/baz
może być on istnieć sys.path
i /foo/bar/baz/__init__.py
, w którym to przypadku from baz.bla import f
i from bla import f
może zarówno praca) i nic nie gwarantuje, że niektóre inne, poprzednie sys.path
pozycja może nie „wywłaszczyć” próbę importu (np., powiedz /foo/bar/baz
jest na sys.path
, ale przed i t istnieje również /fee/fie/foo
i istnieje również całkowicie niepowiązany plik /fee/fie/foo/bla.py
- itd. itp.).
Bez względu na cel tego rodzaju próba odkrycia, sugeruję znalezienie alternatywnej architektury - na przykład jeden gdzie from baz.bla import f
jest faktycznie wykonane (jak PO mówi na początku pytanie), tak że f.__module__
jest prawidłowo ustaw na baz.bla
.
dlaczego trzeba to zacząć? – SilentGhost