2011-01-05 11 views
1

Ich habe eine Python-Anwendung, die eine Verzeichnisstruktur wie diese hat.python __import __() importiert aus 2 verschiedenen Verzeichnissen wenn das selbe Modul an 2 Stellen existiert

-pythonapp 
    -mainpython.py 
    -module1 
     -submodule1 
      -file1.py 
      -file2.py 

     -submodule2 
      -file3.py 
      -file3.py 

     -submodule3 
      -file1.py 
      -file2.py 
      -file5.py 
      -file6.py 
      -file7.py 

, wenn ich versuche, den Python-Dienstprogramme (von mainpython.py) unter submodule3 zu importieren, erhalte ich die ersten 2-Dateien von submodule1. (Bitte, dass submodule1 beachten und 3 haben zwei unterschiedliche Dateien mit dem gleichen Namen). Derselbe Import funktioniert jedoch einwandfrei, wenn kein Konflikt vorliegt, d. H. Die Datei 5,6,7 wird korrekt aus Submodul 3 importiert. Hier

ist der Code:

name=os.path.splitext(os.path.split("module1\submodule3\file1.py")[1])[0] --> file1.py name here is passed dynamically. 

module = __import__(name) 

// Hier ist der Name ist wie „file1“ es funktioniert (aber mit dem oben genannten Problem, obwohl, wenn übergibt den Namen der Datei dynamisch), aber wenn Ich übergebe das komplette Paket als "module1module1.file1" es schlägt mit einem ImportError fehl, dass "kein Modul mit dem Namen file1"

Nun die Frage ist, wie wir dem Interpreter sagen, nur die unter "module1modul3" zu verwenden .file2 "? Ich benutze Python

Dies ist wirklich dringend ein und ich habe alle Versuche aus. Hoffentlich können einige erfahrene Python-Entwickler das für mich lösen?

+0

Können Sie bitte Ihre Frage neu formatieren? –

+2

Warum benutzen Sie '__import__'? Warum nicht einfach 'von module1module3 import filex'? – aaronasterling

Antwort

3

Versuchen Sie, indem eine mit einer leeren __init__.py Datei in jedem und Pakete aus Ihrem Verzeichnis zu erstellen, wenn Sie ein bestimmtes Modul aus einem Paket verweisen mögen

from submodule import mymodule 

Syntax. Das Erstellen von Paketen ist eine gute Möglichkeit, die Module in verschiedene Namespaces zu unterteilen. Und benennen Sie Ihre Module entsprechend ihrer Funktionalität, haben Sie nicht als Datei1, Datei2 usw.

Verwandte Themen