2017-01-31 4 views
3

Ich habe versucht, einige Python-Klassen zu importieren, die in einem Child-Verzeichnis definiert sind. Die Verzeichnisstruktur ist wie folgt:Importieren von Klassen aus dem Child-Verzeichnis python

import urllib 
class BaseChecker(object): 
    # SOME METHODS HERE 

Die gChecker.py Datei:

workspace/ 
    __init__.py 
    main.py 
    checker/ 
     __init__.py 
     baseChecker.py 
     gChecker.py 

Die baseChecker.py zu ähnlich sieht

import baseChecker # should import baseChecker.py 
class GChecker(BaseChecker): # gives a TypeError: Error when calling the metaclass bases 
    # SOME METHODS WHICH USE URLLIB 

Und schließlich die main.py Datei:

import ????? 
gChecker = GChecker() 
gChecker.someStuff() # which uses urllib 

Meine Absicht ist in der Lage sein, main.py Datei ausführen und rufen Sie die Klassen unter dem Verzeichnis checker/ instanziieren. Aber ich möchte es vermeiden, Urlib aus jeder Datei zu importieren (wenn es möglich ist).

Beachten Sie, dass die __init__.py leere Dateien sind.

Ich habe bereits versucht, from checker.gChecker import GChecker in main.py aufrufen, aber eine ImportError: No module named checker.gChecker zeigt.

+1

Wie Sie main.py laufen? Python muss wissen, wo das "checker" -Modul zu finden ist, also "import checker.gChecker", Sie müssten es in Ihrem 'PYTHONPATH' haben. – bear

Antwort

2

Im geposteten Code, in gChecker.py, müssen Sie

from baseChecker import BaseChecker 

statt import baseChecker Ansonsten erhalten Sie

NameError: name 'BaseChecker' is not defined

Auch mit dem genannten Ordner-Struktur tun Sie brauchen nicht checker Modul in derzu seinum von main.py dann sichtbar zu sein, in main.y Sie tun können:

from checker import gChecker.GChecker 
+0

Aber das' Urlib' in beiden Dateien importieren, ist es nicht gibt es eine Möglichkeit, es nur einmal zu importieren? – lpares12

+0

In 'python' müssen Sie jedes Mal, wenn Sie ein Modul verwenden, den zugehörigen Import hinzufügen. Das hat nichts mit dem Fehler zu tun, den Sie bekommen. – saloua

+0

Was wäre, wenn es einige Methoden in 'baseChecker.py' gäbe? Doing 'von BaseChecker Import BaseChecker' importiert nur die Klasse, wenn ich mich nicht irre, oder? – lpares12

Verwandte Themen