2010-10-25 51 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的配置文件中即可完成。