2012-07-17 64 views
0

什麼是Python中執行此類型的導入運行導入與在Python多個子目錄

文件的最好方式進口上述功能於位置的一個/ ne_one/one_two /」

fielname: two.py

def foo(): 
    print "venkatttt!" 

主要文件:main.py這

s = __import__("one.one_one.one_two.two", fromlist=[]) 
function_class = getattr(s,"one_one") 
function_class1 = getattr(function_class,"one_two") 
function_class2 = getattr(function_class1,"two") 
print s 
print function_class 
print function_class1 
print function_class2 
function_class2.foo() 

輸出代碼:

<module 'one' from '/opt/auto/src/ex/one/__init__.pyc'> 
<module 'one.one_one' from '/opt/auto/src/ex/one/one_one/__init__.pyc'> 
<module 'one.one_one.one_two' from '/opt/auto/src/ex/one/one_one/one_two/__init__.pyc'> 
<module 'one.one_one.one_two.two' from '/opt/auto/src/ex/one/one_one/one_two/two.py'> 
venkatttt! 

我正在尋找爲執行此導入

+0

'import one.one_one.one_two.two'有什麼問題? – phihag 2012-07-17 11:49:40

+0

@phihag我試圖執行一個運行時導入,所以病不能夠使用導入one.one_one.one_two.two – Ragav 2012-07-17 11:51:41

回答

0

從你的輸出的最好方式,我可以看到你已經有__init__.py文件在每個子目錄,因此,你可以簡單地import他們:

$> from one.one_one.one_two.two import foo 
$> foo() 

如果你想爲每個模塊句柄,您可以分別導入:

$> import one.one_one as function_class 
$> import one.one_one.one_two as function_class1 
$> import one.one_one.one_two.two as function_class2 

最後,您還可以在one/__init__.py中定義__all__,並在執行import one時讓此自動導入自動發生。

+0

我不想加載所有類..我從數據庫中獲取類的引用,然後我只加載該類沒有。 – Ragav 2012-07-17 12:07:54

+0

然後,您可以使用'importlib.import_module':http://docs.python.org/dev/library/importlib.html#importlib.import_module – lbolla 2012-07-18 10:02:11