2013-01-24 24 views
0

的命名空間我有以下目錄結構的2.6 python腳本和庫:改變目前的python腳本(與模塊名稱類)

+ bin 
\- foo.py 
+ lib 
\+ foo 
\- bar.py 

我想用戶運行bin/foo.pylib/foo.py實例化類。要實現這一點,在我的bin/foo.py腳本我有以下代碼:

from __future__ import absolute_import 
import foo 
klass = foo.bar.Klass() 

然而,這導致:

AttributeError: 'module' object has no attribute 'bar' 

也就是說,它認爲foo本身,而不是庫foo - 重命名bin/foo.pybin/foo-script.py按預期工作。

有沒有辦法讓我保留bin/foo.py腳本和導入lib/foo.py

+0

你試過'導入富作爲酒吧? –

回答

2

當前目錄是默認的路徑上,所以你需要在導入其他foo模塊之前,移除:

import sys 
sys.path = [dir for dir in sys.path if dir != ''] 

另外,在前面加上了lib目錄,以便它的優先級:

import sys 
sys.path = ['../lib'] + sys.path 
+0

很棒;修復它 - 謝謝! – yee379

0

如果您只是編寫import foo,它肯定會加載當前範圍內的foo模塊。假設lib和foo作爲包,你不需要寫這樣的東西來使它工作嗎?

import lib.foo.bar as foobar 
klass = foobar.Klass()