2009-09-30 29 views
9

我遇到的麻煩我的蟒蛇類蟒蛇控制檯內工作的地點。我想自動將所有類導入到全局名稱空間中,以便我可以在不使用任何prefix.module.names的情況下使用它們。Python的 - 導入包中的類到控制檯全局命名空間

這裏就是我這麼遠......

projectname/ 
|-__init__.py 
| 
|-main_stuff/ 
    |-__init__.py 
    |-main1.py 
    |-main2.py 
    | 
    |-other_stuff/ 
    |-__init__.py 
    |-other1.py 
    |-other2.py 

每個文件定義了一類相同的名稱,例如中main1.py將定義一個名爲Main1的類。

我的PYTHONPATH是projectname /的絕對路徑。

我有包含此蟒啓動文件:

from projectname import * 

但是,這並不讓我用我的課都沒有。在啓動python控制檯時,我希望能夠寫出:

ob=Main1() 

但Main1不在當前名稱空間內,所以它不起作用。

我嘗試添加的東西到__init__.py文件...

projectname/__init__.py

import main_stuff 

projectname/main_stuff/__init__.py

import other_stuff 
__all__ = ["main1", "main2", "main3"] 

等。而在我的啓動文件我補充:

from projectname.main_stuff import * 
from projectname.main_stuff/other_stuff import * 

但使用類蟒蛇控制檯我仍然有中寫:

ob=main1.Main1() 

我不希望需要的main1.部分。有誰知道在使用python控制檯時如何自動將我的類放入全局命名空間中?

謝謝。

==== ====編輯

我需要的是在類級別導入包,但from package import *讓我在模塊級的一切。我做這樣的事情的一個簡單的方法之後我:

for module in package do: 
    from package.module import * 

==== ANOTHER編輯====

我結束了添加類進口到我的蟒蛇啓動文件獨立。這是不理想的,因爲維護它的開銷,但它做我想要的。

from class1.py import Class1 
from class2.py import Class2 
from class3.py import Class3 

回答

16

您想要使用不同形式的導入。

projectname/main_stuff/__init__.py

from other_stuff import * 
__all__ = ["main1", "main2", "main3"] 

當你使用這樣的語句:

import foo 

您定義當前模塊中的名稱FOO。然後,您可以使用foo.something來獲取foo中的內容。

當您使用此:

from foo import * 

你正在服用的所有foo中定義的名稱,並在此模塊中定義它們(像富澆名水桶到你的模塊)。

+3

+1「倒一桶名」 – 2013-03-27 18:31:41