Chcę zaimportować plik foo-bar.py. To działa:
foobar = __import__("foo-bar")
To nie:
from "foo-bar" import *
Moje pytanie: Czy jest jakiś sposób, aby użyć powyższego formatu, tj. from "foo-bar" import *
Zaimportować moduł, który ma -
w nim format ?
Odpowiedzi:
nie możesz.
foo-bar
nie jest identyfikatorem. zmień nazwę pliku nafoo_bar.py
Edycja: Jeśli
import
nie jest to Twoim celem (jak w: nie obchodzi Cię, co się staniesys.modules
, nie musisz go importować), po prostu umieszczając wszystkie globale pliku we własnym zakresie, możesz użyćexecfile
źródło
execfile(fn)
używaćexec(open(fn).read())
Istnieje również pakiet importlib.Jeśli nie możesz zmienić nazwy modułu, aby pasował do konwencji nazewnictwa Python, utwórz nowy moduł, który będzie działał jako pośrednik:
źródło
foo_proxy.py
pliku, przypisz wynik__import__(...)
dosys.modules['foo_proxy']
. Właściwie nie rób tego, to okropny pomysł.Począwszy od Python 3.1, możesz użyć importlib:
( https://docs.python.org/3/library/importlib.html )
źródło
Jeśli nie możesz zmienić nazwy oryginalnego pliku, możesz również użyć dowiązania symbolicznego:
Następnie możesz po prostu:
źródło
Jak inni powiedzieli, że nie można używać „-” w nazewnictwie python, istnieje wiele obejść, jedno takie obejście, które byłoby przydatne, gdybyś musiał dodać wiele modułów ze ścieżki używa
sys.path
Na przykład, jeśli twoja struktura jest taka:
źródło