如何使VSCode自动重新加载外部* .py模块?

时间:2019-05-09 12:38:48

标签: python visual-studio-code

我正在Visual Studio Code中处理python代码,并将几个文件用于函数,这些文件是在脚本开头导入的。例如,假设我在与主脚本相同的文件夹中有一个包含内容的文件“ doStuff.py”

def doStuff():
    print('I am doing stuff!')
    # print('lots of stuff.')

然后我将其导入另一个脚本,例如通过编写“ main.py”

from doStuff import doStuff
doStuff()

如果我现在运行脚本,然后再运行例如取消注释doStuff.py中函数的第二行,我希望看到doStuff()方法的新行为。不幸的是,这不会发生。我最近从Spyder切换到VSCode,在Spyder中,它始终可以自动运行,但是VSCode似乎不会自动重新加载导入的模块。

有关我当前工作流程的一些信息: 要打开编程环境,请使用“文件/打开文件夹”,然后选择main.py和doStuff.py所在的文件夹。 然后,我使用“在Python交互式窗口中运行当前文件”启动脚本。 我猜有更好的方法,可能与launch.json文件有关,但是到目前为止,我发现使它使用更改后的外部符号的唯一方法是重新启动VSCode。

编辑: 如果我正确理解,这里的问题:Visual Studio Code: Auto-refresh file changes是不同的,因为它与要在VS-Code中重新加载的外部更改文件有关。我的问题与在交互式窗口中重新加载python模块有关。

修改2: Screenshot, so you believe me.

4 个答案:

答案 0 :(得分:1)

这实际上不是关于VS Code的Python扩展,而是您正在使用的REPL及其提供的功能(我假设是终端中的REPL,但您未指定是REPL还是交互式窗口)。

无论如何,老实说,我发现Spyder会进行自动重新加载有点令人担忧,因为它有很多与之相关的“陷阱”情况(作为Python中导入的实现者,我直接知道重新加载模块才有效在某些情况下,您在上面建议的情况属于没有可靠的from doStuff import doStuff调用而无法获得期望的类别,而没有一些我不想依靠的神奇技巧。)< / p>

答案 1 :(得分:1)

我会对 leo 的回答发表评论,但我没有足够的声誉。 VSCode 中 leo 的代码段告诉我该设置未知。这对我有用:

"jupyter.runStartupCommands": [
    "%load_ext autoreload", "%autoreload 2"
],

答案 2 :(得分:0)

当.py文件更改时,我找不到使vscode的python交互自动刷新的方法。但是我尝试了importlib.reload(),它有些起作用。

import funcs
import importlib
importlib.reload(funcs)
from funcs import *

funcs是我的.py文件,当文件更改时,应运行上面的代码。

答案 3 :(得分:0)

现在可以通过添加以下内容来set up autoreload automatically

    "python.dataScience.runStartupCommands": [
        "%load_ext autoreload", "%autoreload 2"
    ]

settings.json