2010-05-10 103 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

相关问题