【发布时间】:2017-07-25 11:00:07
【问题描述】:
我正在使用 Python + IPython 进行数据科学。我创建了一个文件夹,其中包含我编写的所有模块,并以包的形式进行组织,例如
python_workfolder
|
|---a
| |---__init__.py
| |---a1.py
| |---a2.py
|
|---b
| |---__init__.py
| |---b1.py
| |---b2.py
|
|---c
| |---__init__.py
| |---c1.py
| |---c2.py
|
|
|---script1.py
|---script2.py
在每次会话开始时,我都会要求 IPython 自动重新加载模块:
%load_ext autoreload
%autoreload 2
现在...假设 a1.py 包含一个类 A1,我想从其中一个脚本中调用它。在 a 包的 __init__.p 中导入模块
import a1
然后在脚本中导入我需要的类
from a.a1 import A1
如果 A1 类有错误,我修改了它,没有办法让 Python 在不重启内核的情况下重新加载它。
我试过del a1、del sys.modules['a1']、del sys.modules['a']。每次它使用旧版本的类,直到我不重新启动内核......谁可以给我一些建议?
【问题讨论】:
-
您可能需要重新阅读 FineManual,然后再声明“重新加载不起作用”?清楚地解释了注意事项和限制:docs.python.org/3/library/imp.html#imp.reload
-
我发现
reload如果我在 IPython shell 中键入命令可以工作,但如果我通过 Pyzo(我正在使用的 IDE)运行它们就不行。这就是问题所在......
标签: python python-3.x ipython pyzo