2013-02-28 56 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