2017-01-31 50 views
3

我一直在試圖導入一些在子目錄中定義的python類。目錄結構如下:從子目錄導入類python

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

baseChecker.py類似於:

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

gChecker.py文件:

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

最後的main.py文件:

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

我的意圖是能夠運行main.py文件並調用實例化checker/目錄下的類。但我想避免從每個文件導入urllib(如果可能的話)。

請注意,__init__.py都是空文件。

我已經打過電話中main.pyfrom checker.gChecker import GCheckerImportError: No module named checker.gChecker節目。

+1

你是如何運行的main.py? Python需要知道在哪裏可以找到checker模塊,所以要執行import checker.gchecker,你需要在你的'PYTHONPATH'中找到它 – bear

回答

2

在投稿代碼,在gChecker.py,你需要做的

from baseChecker import BaseChecker 

,而不是import baseChecker 否則你

NameError: name 'BaseChecker' is not defined

還與所提到的文件夾結構,你不需要checker模塊在PYTHONPATH爲了通過main.py 可見然後在main.y你可以這樣做:

from checker import gChecker.GChecker 
+0

但是這使得我在這兩個文件中都導入了urllib,有一種方法只能導入一次? – lpares12

+0

在'python'中,每次使用模塊時都必須添加相關的導入。這與你得到的錯誤沒有任何關係。 – saloua

+0

如果'baseChecker.py'中有一些方法會怎麼樣?如果我沒有弄錯,從baseChecker進口BaseChecker'只會導入類,對嗎? – lpares12