我有一个程序可以自动从用户提供的JSON代码生成数据结构。我还想提供一个选项,允许用户编写自己的函数来以编程方式生成此数据结构。有没有办法让Python按路径加载任意模块并返回该模块的命名空间,以便我可以从我的程序中调用用户的函数?
示例,我想要以下内容:
def make(custom):
if not custom:
return helper('example.json')
else:
return load('path/to/user-script.py').make() # this line here
答案 0 :(得分:1)
您可以使用.py
导入已命名的imp.load_source
文件,就好像它是一个模块一样;见this question。
这通常是一件非常奇怪的事情,但加载不在Python模块层次结构中的用户钩子似乎是一个好的借口。 :)
This Python bug声称{3}在Python 3中已经过时,并建议稍微麻烦和不太明显的调用:
load_source