Zastępowanie zaimportowanego modułu.

0

Zaimportowałem pewien moduł (powiedzmy foo), import wymagał dodania katalogu do listy

sys.path.append(..)

Chciałem zamienić moduł foo innym modułem. Nowy moduł jest w innym katalogu, ale ma taką samą nazwę. Spróbowałem tak:

sys.path[last_index - 1] = 'nowy_katalog`
#sprawdziłem, sys.path ma oczekiwaną zawartość
del(foo)
#moduł foo jest niedostępny
import foo

Python widzi pierwotną wersję modułu foo
Jak należy podmieniać moduły?
Mam Python 3.6.0 na Windows 7.

0

Ja bym to jednak zrobił tak:
https://docs.python.org/3/library/functions.html#__import__
albo za pomocą:
https://docs.python.org/3/library/importlib.html#importlib.import_module

Czyli u ciebie zrobił:

foo = importlib.import('cośtam')
0

Wypróbowałeś te sposoby? Ja na razie tylko drugi.
Ani

foo = importlib.import_module('foo`)

ani

fo = importlib.import_module('foo')

nie działa. Zaimportowany moduł foo (lub fo) jest identyczny z pierwszym modułem foo.

0

@bogdans ale python przeszukuje path w kolejności, więc jeśli tylko dodałeś na koniec jakis inny folder to nic to nie da, bo moduł zostanie znaleziony wcześniej. Musisz tą nową ścieżkę dodać na początku.
No i zawsze można też bezpośrednio: https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly

0

Czytałeś ten fragment?

sys.path[last_index - 1] = 'nowy_katalog`
#sprawdziłem, sys.path ma oczekiwaną zawartość

Dodanie na początku niczego nie zmienia.
Rada by importować bezpośrednio, podsunęła mi rozwiązanie problemu:

del(sys.modules['foo'])

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