为了缩短 Python 网页应用程序的开发时间,我尝试在最近修改过的模块中使用 reload()。通过专门的网页(Web 应用程序的开发版本的一部分),可以列出最近修改过的模块列表(py 文件的修改时间戳晚于相应的 pyc 文件)。完整的模块列表是从 sys.modules 中获取的(我会筛选该列表,仅关注属于我的包的模块)。
在某些情况下,重新加载单个 Python 文件似乎有效,而在其他情况下则无效。我猜想,所有依赖于已修改模块的模块都应该重新加载,并且重新加载应该按正确顺序进行。
我正在寻找一种方法来获取特定模块导入的模块列表。在 Python 中是否有这种内省的方法呢?
我知道我的方法可能不是 100% 可靠的,最安全的方式是重新加载所有内容,但如果快速的方法对大多数情况都有效,那么对于开发目的来说就足够了。
针对 DJango 自动重新加载的评论的回复:
@Glenn Maynard,谢谢,我已经了解了 DJango 的自动重新加载。我的 Web 应用程序基于 Zope 3,并且由于有大量的包和许多基于 ZCML 的初始化,总重启需要花费约 10 到 30 秒,如果数据库大小更大,则需要花费更多时间。我试图缩短重启期间花费的时间。当我觉得自己已经做了很多更改时,我通常会选择完全重新启动,但更频繁地,我只是在这里和那里修改了几行代码,我不想花费太多时间。开发设置与生产设置完全独立,通常,如果 reload 出现问题,由于应用程序页面开始显示不合逻辑的信息或抛出异常,问题将变得明显。我非常有兴趣探索选择性重新加载是否可行。
在某些情况下,重新加载单个 Python 文件似乎有效,而在其他情况下则无效。我猜想,所有依赖于已修改模块的模块都应该重新加载,并且重新加载应该按正确顺序进行。
我正在寻找一种方法来获取特定模块导入的模块列表。在 Python 中是否有这种内省的方法呢?
我知道我的方法可能不是 100% 可靠的,最安全的方式是重新加载所有内容,但如果快速的方法对大多数情况都有效,那么对于开发目的来说就足够了。
针对 DJango 自动重新加载的评论的回复:
@Glenn Maynard,谢谢,我已经了解了 DJango 的自动重新加载。我的 Web 应用程序基于 Zope 3,并且由于有大量的包和许多基于 ZCML 的初始化,总重启需要花费约 10 到 30 秒,如果数据库大小更大,则需要花费更多时间。我试图缩短重启期间花费的时间。当我觉得自己已经做了很多更改时,我通常会选择完全重新启动,但更频繁地,我只是在这里和那里修改了几行代码,我不想花费太多时间。开发设置与生产设置完全独立,通常,如果 reload 出现问题,由于应用程序页面开始显示不合逻辑的信息或抛出异常,问题将变得明显。我非常有兴趣探索选择性重新加载是否可行。