我有一个叫做KosmoSuite
的模块,在以下的__init__.py
中被初始化:
...
from chemical_fuels import *
from orbital_mechanics import *
from termodynamics import *
from rail_guns import *
...
在文件
chemical_fuels.py,orbital_mechanics.py,thermodynamics.py,rail_guns.py
中有一些数据表、常量和函数,可用于进行一些物理计算(例如函数orbital_mechanics.escape_velocity(M,R)
,用于计算给定质量和半径的行星的逃逸速度)。我想使用Python解释器作为太空相关问题的交互式计算器。
然而,问题在于交互式开发和调试。 当我执行以下操作时:
>>> import KosmoSuite as ks
# ... modify something in orbital_mechanics.escape_velocity( ) ...
>>> reload(ks)
>>> ks.orbital_velocity( R, M)
然而,我的修改没有影响到
ks.orbital_velocity( R, M)
。有没有替代reload(ks)
的方法可以完成这个任务(即重新加载从from some_module import *
导入的所有对象、常量和函数递归地)。更好的方法是:
>>> from KosmoSuite import *
# ... modify something in orbital_mechanics.escape_velocity( ) ...
>>> from KosmoSuite reimport *
>>> orbital_velocity( R, M)
注:我目前正在使用 Spyder(Python(x,y)),但默认的 Python 解释器也一样。在这个问题中,提到了IPython中的深度重新加载(dreload)。我不确定它是否完全满足此功能,但我也不喜欢IPython。
bak_modules = sys.modules[:] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type
...也许是因为我正在使用Python 2.7或Spyder? - Prokop Hapalasys.modules.copy()
并明确删除键才能使其正常工作。我已经更新了答案。 - otus