如何重新加载Python模块?

问题描述 投票:0回答:1

这个问题之前已被问过 1000 次,但似乎对我不起作用。

使用Python3.9和VScode,尽管我已经测试过它也可以在Mac上使用纯文本编辑应用程序进行编辑。

我克隆了这个存储库:https://github.com/trevorbayless/cli-chess,我想自定义它。

我通过终端运行它: $ python3 .../__main__.py

一切正常。以下是 __main__.py 的内容

from cli_chess.core.main import MainModel, MainPresenter

def main() -> None:
    """Main entry point"""
    MainPresenter(MainModel()).run()

if __name__ == "__main__":
    main()

我在 VScode 中打开项目,对源代码中的文件进行更改,但更改没有反映。仅反映对 __main__.py 的更改。我可以将 __main__.py 移动到另一个目录并毫无问题地运行该程序。我什至可以从我的计算机中删除除 __main__.py 之外的所有项目文件,并且仍然运行该程序,就好像我没有碰任何东西一样。

这对我来说仍然没有多大意义,但据我了解,这是由于Python中模块的处理方式所致,我需要重新加载它们。我无法让它工作。

我尝试过使用如下所示的 importlib 以及其他变体。似乎没什么区别。

import cli_chess.core.main
import importlib
importlib.reload(cli_chess.core.main)
from cli_chess.core.main import MainModel, MainPresenter

def main() -> None:
    """Main entry point"""
    MainPresenter(MainModel()).run()

if __name__ == "__main__":
    main()

我也看到过这些命令:

%reload_ext autoreload
%autoreload 2

我不明白如何使用它。 “只需将其添加到您的代码中”就会出现语法错误。

其他人建议重新启动 VScode。我退出,我重新打开,没有任何变化。我肯定错过了一些明显的东西,对吧?将一些打印语句放入一个相当基本的 python 项目中是多么困难,这有点让我震惊。

顺便说一下,trevorbayless 的道具,非常酷的国际象棋应用程序。

visual-studio-code python-module python-3.9
1个回答
0
投票

要“重新加载”模块,您只需删除模块对象,然后再次导入即可。像这样:

del module_name
import module_name

虽然我并不真正建议这样做。可能有更好的解决方案来解决您的问题,但如果您真的想“重新加载”模块,这是一个可能的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.