2013-02-28 47 views
2

我有一个从用户提供的JSON代码自动生成数据结构的程序。我还希望提供一个选项,允许用户编写自己的函数以编程方式生成此数据结构。有没有一种方法让Python通过路径加载任意模块并返回该模块的名称空间,以便我可以从我的程序中调用用户的函数?如何加载用户代码?

例子,我想类似如下:

def make(custom): 
    if not custom: 
     return helper('example.json') 
    else: 
     return load('path/to/user-script.py').make() # this line here 

回答

1

您可以导入一个名为.py文件,就好像它是通过使用imp.load_source模块;见this question

这通常是一件非常奇怪的事情,但加载不在Python模块层次结构中的用户钩子似乎是一个好的借口。 :)


This Python bug声称load_source是在Python 3过时,并建议在一定程度上更加繁琐,不太明显的调用:

importlib.SourceFileLoader(name, path).load_module(name) 
+0

我看到这个问题实际上,但是我虽然这是为Python 2因为imp.load_source没有记录为3,但我刚才检查,它仍然存在,但没有记录。人物。在这里,有一个cookie。 – darkfeline 2013-02-28 06:21:39

+0

啊,它似乎已经过时了3.更新的答案与新的热度 – Eevee 2013-02-28 06:30:48