Wie lade ich ein Python-Modul mit seinem vollständigen Pfad?
Beachten Sie, dass die Datei überall im Dateisystem liegen kann.
Wie lade ich ein Python-Modul mit seinem vollständigen Pfad?
Beachten Sie, dass die Datei überall im Dateisystem liegen kann.
Hier ist eine Möglichkeit, Dateien zu laden, ähnlich wie in C usw.
from importlib.machinery import SourceFileLoader
import os
def LOAD(MODULE_PATH):
if (MODULE_PATH[0] == "/"):
FULL_PATH = MODULE_PATH;
else:
DIR_PATH = os.path.dirname (os.path.realpath (__file__))
FULL_PATH = os.path.normpath (DIR_PATH + "/" + MODULE_PATH)
return SourceFileLoader (FULL_PATH, FULL_PATH).load_module ()
Umsetzungen wo:
Y = LOAD("../Z.py")
A = LOAD("./A.py")
D = LOAD("./C/D.py")
A_ = LOAD("/IMPORTS/A.py")
Y.DEF();
A.DEF();
D.DEF();
A_.DEF();
Jede der Dateien sieht wie folgt aus:
def DEF():
print("A");
Der beste Weg, denke ich, ist aus der offiziellen Dokumentation ( 29.1. imp - Zugriff auf die Import-Interna ):
import imp
import sys
def __import__(name, globals=None, locals=None, fromlist=None):
# Fast path: see if the module has already been imported.
try:
return sys.modules[name]
except KeyError:
pass
# If any of the following calls raises an exception,
# there's a problem we can't handle -- let the caller handle it.
fp, pathname, description = imp.find_module(name)
try:
return imp.load_module(name, fp, pathname, description)
finally:
# Since we may exit via an exception, close fp explicitly.
if fp:
fp.close()
Etwas Besonderes ist es, ein Modul mit absolutem Pfad mit Exec() zu importieren: (exec nimmt einen Code-String oder ein Code-Objekt, während eval einen Ausdruck nimmt.)
PYMODULE = 'C:\maXbox\mX47464\maxbox4\examples\histogram15.py';
Execstring(LoadStringJ(PYMODULE));
Und dann Werte oder Objekt mit eval() erhalten:
println('get module data: '+evalStr('pyplot.hist(x)'));
Das Laden eines Moduls mit exec ist wie ein Import mit Wildcard-Namespace:
Execstring('sys.path.append(r'+'"'+PYMODULEPATH+'")');
Execstring('from histogram import *');
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.