1793 Stimmen

Wie importiere ich ein Modul unter Angabe des vollständigen Pfads?

Wie lade ich ein Python-Modul mit seinem vollständigen Pfad?

Beachten Sie, dass die Datei überall im Dateisystem liegen kann.

-1voto

Bryan Grace Punkte 1698

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");

-1voto

Jorge Punkte 374

Sie können importfile von pydoc verwenden

from pydoc import importfile
module = importfile('/full/path/to/module/module.py')
name = module.myclass() # myclass is a class inside your python file

-2voto

Zompa Punkte 360

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()

-3voto

Mhadhbi issam Punkte 139

Ich finde, das ist eine einfache Antwort:

module = dict()

code = """
import json

def testhi() :
    return json.dumps({"key" : "value"}, indent = 4 )
"""

exec(code, module)
x = module['testhi']()
print(x)

-5voto

Max Kleiner Punkte 895

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.com

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.

Powered by:

X