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.

17voto

zuber Punkte 3359

Sie können die

load_source(module_name, path_to_file)

Methode aus dem Koboldmodul .

14voto

Chris Calloway Punkte 1330

Sie können dies tun mit __import__ y chdir :

def import_file(full_path_to_module):
    try:
        import os
        module_dir, module_file = os.path.split(full_path_to_module)
        module_name, module_ext = os.path.splitext(module_file)
        save_cwd = os.getcwd()
        os.chdir(module_dir)
        module_obj = __import__(module_name)
        module_obj.__file__ = full_path_to_module
        globals()[module_name] = module_obj
        os.chdir(save_cwd)
    except Exception as e:
        raise ImportError(e)
    return module_obj

import_file('/home/somebody/somemodule.py')

13voto

Kumar KS Punkte 827

Wenn wir Skripte im gleichen Projekt, aber in verschiedenen Verzeichnissen haben, können wir dieses Problem mit der folgenden Methode lösen.

In dieser Situation utils.py ist in src/main/util/

import sys
sys.path.append('./')

import src.main.util.utils
#or
from src.main.util.utils import json_converter # json_converter is example method

9voto

Matt Punkte 141

Ich glaube, Sie können Folgendes verwenden imp.find_module() y imp.load_module() um das angegebene Modul zu laden. Sie müssen den Modulnamen aus dem Pfad abspalten, d.h. wenn Sie Folgendes laden wollen /home/mypath/mymodule.py die Sie tun müssten:

imp.find_module('mymodule', '/home/mypath/')

...aber das sollte die Arbeit erledigen.

8voto

bob_twinkles Punkte 242

Sie können die pkgutil Modul (insbesondere das walk_packages Methode), um eine Liste der Pakete im aktuellen Verzeichnis zu erhalten. Von dort aus ist es trivial, die Methode importlib Maschinen, um die gewünschten Module zu importieren:

import pkgutil
import importlib

packages = pkgutil.walk_packages(path='.')
for importer, name, is_package in packages:
    mod = importlib.import_module(name)
    # do whatever you want with module now, it's been imported!

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