我正在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模块有关。
答案 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
。