2010-05-10 71 views
0

我有一種插件系統中,用這個佈局:是否可以從其他子文件夾中的其他子文件夾自動導入模塊?

  • 的Python
    • SDK
      • 插件
        • Plugin1
        • Plugin2

全部3有一個__init__.py文件。我想知道是否有可能從任何插件能夠做import SDK(就好像SDK位於site-packages文件夾中)。

我在需要部署,更新,刪除,添加或更改文件SDK或任何在非管理員帳戶的插件,並想知道如果我能在一個乾淨的方式獲得SDK(我可以sys.path.append情況在所有的插件,但我不知道是否存在一個更好的選擇)。

我想象的是,在插件的init coulkd工作中使用此:

import sys 
import os 

ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__),'..')) 

print ROOT_DIR 
sys.path.append(ROOT_DIR) 

但顯然沒有執行該代碼(我想象__init__.py是自動magicalled在模塊的負載執行☹)

回答

2
  • 的Python

    • start.py

      from SDK.Plugins import Plugin1 
      print Plugin1.test() 
      
    • SDK

      • __init__.py
      • 插件

        • __init__.py
        • Plugin1.py

          from SDK.Plugins import Plugin2 
          def test(): 
              return Plugin2.test2() 
          
        • Plugin2.py

          def test2(): 
              return "This worked!" 
          

# python start.py 
This worked! 

這工作,因爲在Plugin1.py你正在做的祁門功夫t 相對於start.py,執行的腳本,而不是自己。

如果您要直接執行Plugin1.py,則必須弄亂路徑,但是如果始終使用文件夾層次結構中較高腳本的路徑,那麼這是最簡單的方法。

+1

好的目錄樹 – YOU 2010-05-11 00:53:29

相關問題