是否可以从其他子文件夹中的其他子文件夹自动导入模块?
问题描述:
我有一种插件系统中,用这个布局:是否可以从其他子文件夹中的其他子文件夹自动导入模块?
- 的Python
- SDK
- 插件
- Plugin1
- Plugin2
- 插件
- SDK
全部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在模块的负载执行☹)
答
-
的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
,则必须弄乱路径,但是如果始终使用文件夹层次结构中较高脚本的路径,那么这是最简单的方法。
好的目录树 – YOU 2010-05-11 00:53:29