清除会话并重新加载()问题(带有repr错误)

你好,
这似乎是一个古老的问题,我已经回复了一点,而是
比假设答案是"你不能那样做",我想我会发布我的
该问题的版本以及可再现的错误以说明
我的困惑.
我的问题是我在XSI中使用Python(3D图形
应用).如果我想重新启动Python,我必须重新启动XSI.这个
浪费了很小的时间.
解决方案将以某种方式卸载模块和所有参考以及
允许我的进口重建缓存.我想这会很棒
完全清除Python会话,但是3D应用程序可能具有
在创业公司的会议上添加了一些东西(尽管我对此表示怀疑
在规范之外看不到任何进口模块).
我尝试使用非常简单的算法使用重新加载.只需运行
通过每个导入的模块,忽略任何"无"的东西或
c:驱动器(我们所有的python都在网络驱动器上,所以这个黑客
现在为我工作)和重新加载().我开始意识到这一点
几乎不够聪明,无法处理子包.
在发布repro之前,我的问题是:
1)有人对我的情况有一个不使用的工作流吗
重新加载,并且不涉及为每个编辑/修复重新启动应用程序
2)任何人都可以帮助我朝着正确的方向指向建造一个
可靠的算法可简洁地重新加载所有负载模块?注意:i
不需要在记忆中维护任何东西(即实例,指针,
等等)每次都将再次初始化.我不是在问
对于代码.只有一些想法或伪代码会做得很好.
这是一个"简单"的repro ...
软件包结构:
---------------------------------------
继承
__init__.py
Baselib.py
孩子
__init__.py
__init__.py:
------------------------
导入系统,操作系统
DEF REROOADMODULES():
"""
重新加载所有不在C:驱动器上的导入模块.
"""
打印"重新加载Python模块..."
#迭代所有导入的模块
模块= sys.modules
对于模块中的modName:
mod =模块[modName]
#跳过无类型和其他我们不在乎的ITESM
如果modName ==" __ -main __"或不hasattr(mod," __ file __"):
继续
#获取驱动器并跳过C:驱动器上的任何内容
drive = os.path.splitdrive(mod .__文件__)[0]
如果drive!=" c:":
重新加载(mod)
打印"重新加载%s"%mod
Baselib.py:
------------------------
班级基地(对象):
经过
BaseclassB(Baseclassa):
def __init __(自我):
Super(BaseclassB,Self).__ INIT __()
child.__init__.py:
-----------------------------------
导入sashenitrepro.baselib作为Baselib
Class ChildClass(Baselib.baseclassb):
def __init __(自我):
超级(ChildClass,Self).__ INIT __()
跑:
---------

Trackback(最近的最新电话):
文件" ",第0行,
文件" \\ nas6tb \ projects \ tech \ users \ rafe.sacks \ python \ in heritrepro中
\ child \ __ init__.py",第5行,在__init__
超级(ChildClass,Self).__ INIT __()
文件" \\ nas6tb \ projects \ tech \ users \ rafe.sacks \ python \ in heritrepro中
\ baselib.py",第6行,在__init__中
超级(baseclassb,self).__ Init__ () TypeError:Super(类型,OBJ):OBJ必须是实例或亚型 类型 注意:如果我不为"孩子"使用子包(child.py),这可以有效 反而). 假设按文件结构重新加载过于简单吗 可能起作用? 现在,我通过Reload()来解决这个问题 - 正确包装 在运行ReloAdmodules()后,如果发生错误. 有点 令人沮丧的是,在我意识到这是我的两天之前,我花了两天的时间 reload()引起此错误,而不是超级()或其他一些未知的到 - 我继承/包装结构问题. 我通过 直到我偶然地注意到这件事曾经起作用,模块一次 然后再也不会! ....哦,好吧,这些是学习的乐趣 艰辛的道路. 我知道这是一个漫长的人. 如果您走了这么远,谢谢 阅读, -Rafe

标签: python

添加新评论