Ich möchte foo-bar.py importieren. Das funktioniert:
foobar = __import__("foo-bar")
Das tut nicht:
from "foo-bar" import *
Meine Frage: Gibt es eine Möglichkeit, das obige Format zu verwenden, dh from "foo-bar" import *
ein Modul zu importieren, das ein enthält -
?
Antworten:
du kannst nicht.
foo-bar
ist keine Kennung. Benennen Sie die Datei in umfoo_bar.py
Bearbeiten: Wenn dies
import
nicht Ihr Ziel ist (wie in: Es ist Ihnen egal, was passiertsys.modules
, Sie brauchen es nicht, um sich selbst zu importieren), können Sie nur alle Globals der Datei in Ihren eigenen Bereich bringenexecfile
quelle
execfile(fn)
Verwendungexec(open(fn).read())
gibt es auch Paket importlib.Wenn Sie das Modul nicht entsprechend den Python-Namenskonventionen umbenennen können, erstellen Sie ein neues Modul als Vermittler:
quelle
foo_proxy.py
Datei, die Ausgabe zuweisen__import__(...)
zusys.modules['foo_proxy']
. Tu das eigentlich nicht, es ist eine schreckliche Idee.Ab Python 3.1 können Sie importlib verwenden:
( https://docs.python.org/3/library/importlib.html )
quelle
Wenn Sie die Originaldatei nicht umbenennen können, können Sie auch einen Symlink verwenden:
Dann können Sie einfach:
quelle
Wie andere bereits sagten, können Sie das "-" bei der Python-Benennung nicht verwenden. Es gibt viele Problemumgehungen. Eine solche Problemumgehung, die nützlich wäre, wenn Sie mehrere Module aus einem Pfad hinzufügen müssten, wird verwendet
sys.path
Zum Beispiel, wenn Ihre Struktur so ist:
quelle