2011-06-26 90 views
3

我正在嘗試將我的代碼庫重新組織到正確的Python包(帶有子包)中,以準備上傳到PyPI。我有以下目錄(測試):將子包中的類用Python包導入到主名稱空間中

Py6S/ 
    __init__.py 
    test.py 
    Params/ 
      __init__.py 
      AeroModel.py 

AeroModel.py包含:

class AeroModel: 
    NO_AEROSOL=0 
    CONTINENTAL=1 
    MARITIME=2 
    URBAN=3 
    USER=4 
    DESERT=5 
    BIOMASS_BURNING=6 
    STRATOSPHERIC=7 

的Py6S 初始化的.py包含:

__all__ = ["Params"] 

的PARAMS 初始化 .py包含:

__all__ = ["AtmosModel", "AeroModel", "AtmosCorr"] 

但是,當我做from Py6S import *我得到參考Params,但不是AtmosModel或AeroModel。

我希望能夠輸入from Py6S import *,並且可以使用所有的AeroModel,AtmosModel,AtmosCorr等,而不必將任何模塊名稱放在它們的前面。

+0

我建議你不要給相同的名稱,以模塊及其類作爲它會造成輕微的混淆。爲模塊名稱使用小寫字母(PEP 8)。所以,在你的情況下,它應該是'aeromodel.py'模塊,包含類'AeroModel' –

+0

@Guanidene - 謝謝。這有助於解決我對下面答案的評論嗎?我希望能夠輕鬆導入AeroModel類。 – robintw

回答

1

如果Py6S的__init__.pyfrom Params import *: 你需要做的:

import Params 
__all__ = ["Params"] 
from Params import * 
__all__ += Params.__all__ 

那些添加到Py6S的__all__

+0

你真的需要'從Params import *'來訪問'Params .__ all__'嗎? –

+1

否,但如果您在當前命名空間中的'__all__'列出'Params'的名稱,則需要它。 –

+0

@Dan - 很好地獲得AeroModel,AtmosModel等的模塊導入 - 謝謝。但是,一旦我運行'從Py6S導入*',我必須將AeroModel類(AeroModel模塊中唯一的類)引用爲'AeroModel.AeroModel'。有沒有一種方法可以讓* class *被導入而不僅僅是模塊? – robintw

相關問題