目前我正在开发一个包含子模块并使用numpy/scipy的python项目.Ipython用作交互式控制台.不幸的是,我对我现在使用的工作流程不是很满意,我将不胜感激.
在IPython中,框架由一个简单的import命令加载.但是,通常需要更改框架的一个子模块中的代码.此时已经加载了一个模型,我使用IPython与它进行交互.
现在,框架包含许多相互依赖的模块,即在最初加载框架时,主模块正在导入和配置子模块.只有在使用重新加载模块时才会执行对代码的更改reload(main_mod.sub_mod).这很麻烦,因为我需要使用完整路径单独重新加载所有已更改的模块.如果reload(main_module)还要重新加载所有子模块,但没有重新加载numpy/scipy 将是非常方便的..
在Python中,如果要以编程方式导入模块,可以执行以下操作:
module = __import__('module_name')
Run Code Online (Sandbox Code Playgroud)
如果要导入子模块,您会认为这只是一个简单的问题:
module = __import__('module_name.submodule')
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用; 你module_name再来一次 你必须做:
module = __import__('module_name.submodule', fromlist=['blah'])
Run Code Online (Sandbox Code Playgroud)
为什么?实际值fromlist似乎根本不重要,只要它不是空的.要求一个论点,然后忽略它的价值观有什么意义呢?
Python中的大多数东西似乎都是有充分理由的,但对于我的生活,我无法对这种行为存在任何合理的解释.