我有一种插件系统,有这种布局:
所有3个文件都有__init__.py
个文件。我想知道是否有可能从任何插件中import SDK
(就像SDK
在site-packages文件夹中一样)。
我遇到需要部署,更新,删除,添加或更改SDK
文件或非管理员帐户下的任何插件的情况,并想知道我是否可以获得SDK
一个干净的方式(我可以在所有插件中sys.path.append
,但我想知道是否存在更好的选择。)
我想在Plugins 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
在模块的加载中自动执行了魔法☹)
答案 0 :(得分: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
中您正在执行相对于start.py
的导入,即已执行的脚本,而不是自身。
如果要直接执行Plugin1.py
,则必须弄乱路径,但如果它总是从文件夹层次结构中较高的脚本中使用,那么这是最干净的方法它