2010-10-25 84 views
0

我想建立一個標準腳本文件,該文件在啓動時使用PYTHONSTARTUP環境變量導入到python中。另外,我希望能夠在外部編輯器中修改它之後方便地重新加載相同的腳本文件,以便在修改後測試其行爲。 我創建了一個〜/ .pythonrc.py文件,並將其設置爲PYTHONSTARTUP:使用PYTHONSTARTUP交互式測試解釋器中的python文件

import os 
import imp 

def load_wb(): 
    _cwd = os.getcwd() 
    os.chdir(os.path.join(os.getenv('HOME'),'Skripte')) 
    import workbench 
    imp.reload(workbench) 
    os.chdir(_cwd) 

load_wb() 

這是我一開始就非常最小的腳本文件:

def dull_function(): 
    print('Not doing much...') 

print('Workbench loaded.') 

當我啓動的Python 3.1.2, .pythonrc已成功執行並且已導入workbench.py​​,但dull_function不會顯示在全局命名空間或本地命名空間中。我有什麼不同的做法?

+1

你試過'workbench.dull_function'嗎? – rubik 2010-10-25 15:08:23

+0

workbench.dull_functuion產生NameError。這並不奇怪,因爲導入後dir()列出的命名空間中都沒有工作臺和dull_function。 imp.reload(工作臺)返回一個模塊對象。有沒有辦法將這個對象手動集成到全局名稱空間中? – neradis 2010-10-25 20:24:11

回答

0

import語句移到該函數之外。您基本上將workbench模塊導入到功能範圍內,而不是全局範圍內(嘗試從load_wb內部調用workbench.dull_function以自行查看)。

換句話說,你的代碼更改爲:

import os 
import imp 
import workbench 

def load_wb(): 
    _cwd = os.getcwd() 
    os.chdir(os.path.join(os.getenv('HOME'), 'Skripte')) 
    imp.reload(workbench) 
    os.chdir(_cwd) 

load_wb() 
0

沒有真正解決您的眼前問題,但...你可以欣賞使用IPython的外殼在這種情況下的測試。使用自動導入功能,您可以標記模塊(如果需要)在每個已執行的行上進行(重新)加載。

這意味着你可以%aimport workbench然後每次運行some_function_Im_testing()時,workbench將被重新加載,如果它改變了。只需將自動導入行添加到ipython的配置文件中即可完成。