Python在VSCode中:每次将工作目录设置为Python文件的路径

25
所以我想从Spyder迁移到VSCode,但我遇到了一个问题,由于我的工作目录与数据集路径不同,因此无法访问数据集。由于我没有调试任何内容,因此launch.json没有为我自动生成(我尝试过这个)。如何在VSCode中将工作目录设置为始终是我要运行的Python文件的目录?如果这是不好的做法,您能否向我展示一个易于使用的配置?我想为VSCode的IPython终端设置这个。

你链接的那个配置应该可以实现这个功能,你试过了吗?它有效吗? - bracco23
@bracco23,我不知道如何设置它。它在根目录下的.vscode文件夹中吗? - Fawwaz Yusran
你能在不修改调试launch.json的情况下解决这个问题吗?我只是想运行一个Python脚本,并让它在所在的文件夹中执行...我认为这很基础? - Derek Eden
9个回答

23

修改此设置:

文件 > 首选项 > 设置 > Python > 数据科学 > 在文件目录中执行


5
“cwd”:“$ {fileDirname}”在launch.json文件中对我无效。但这个可以。现在当前工作目录设置为文件位置。谢谢! - Jake
4
调试时是否也有这种方法? - Shep Bryan
2
这里的设置中没有“Python”。 - Ezequiel Barbosa
4
@ShepBryan 这个链接也帮助我设置了调试:https://github.com/microsoft/vscode-python/issues/19471#issuecomment-1184905417 - dogekali

19

更新的解决方案:截至2021年1月21日可行

选项1:

  1. 找到并打开用户设置文件:
    • Windows:%APPDATA%\Code\User\settings.json
    • macOS:$HOME/Library/Application Support/Code/User/settings.json
    • Linux:$HOME/.config/Code/User/settings.json
  2. 添加以下行:"python.terminal.executeInFileDir": true

选项2:

  1. 打开设置编辑器:
    • 在 Windows / Linux 上 - 文件 > 首选项 > 设置
    • 在 macOS 上 - Code > 首选项 > 设置
    • 或使用键盘快捷键 (Ctrl+,).
  2. 勾选以下框:
    • 扩展 > Python > 终端:在文件目录中执行。
    • 或使用搜索栏并输入此设置 id:python.terminal.executeInFileDir

3
理论上听起来不错,但实际上并不奏效。即使使用Shift+Enter,Python仍然在我的主目录中启动,而不是在脚本目录中。 - Fizz
3
截至2022年8月,这些都不起作用。 - Ezequiel Barbosa
选项1在2023年5月在Windows 10上运行得非常好。 - Nemo
1
选项2今天对我有效。 - freenrg

9
您可以在Visual Studio Code用户指南中找到关于launch.json设置文件的更多详细信息,包括如何创建一个以及它的含义。
简而言之,您只需要在通常使用“打开工作区”操作打开的目录下的.vscode子文件夹中创建一个launch.json文件,并将由其他答案提供的片段粘贴进去。如果发现不起作用,则可以尝试更改cwd选项,从以下内容开始:
            "cwd": "${fileDirname}"

转为如下内容

            "cwd": ""

"cwd": "" 对我来说是一个神奇的解决方法,谢谢... - ptim
实际上,在使用"console": "integratedTerminal"运行脚本之前,还需要手动进入$fileDirname目录。 - ptim
1
这个回答的措辞很令人困惑。是“只需在 .vscode 子文件夹下创建 launch.json 文件”还是“只需创建一个位于 .vscode 子文件夹中的 launch.json 文件”? - Ezequiel Barbosa
@EzequielBarbosa 缺少一个介词。你应该在最后加上 .vscode/launch.json,创建缺失的内容 :) - bracco23
这个方法是可行的,但每次开始新项目时都需要这样做。有没有一种方法可以将此设置全局化?我尝试将这些设置添加到 ~/.vscode/launch.json 中,但没有成功。 - Jakob

8

更新方案截至2022年1月24日仍然有效

可以在设置菜单中更改。转到“文件”>“首选项”>“设置”并搜索“在文件路径中执行”。您将找到一个名为的选项:

Python > Terminal: Execute In File Dir
  When executing a file in the terminal, whether to use execute in the file's directory, instead of the current open folder.

1
已经检查过了,即使重新启动VSCode,它仍然无法正常工作。典型的微软问题。 - Fizz
2
显然,你必须在代码中将该目录作为工作区打开,而不仅仅是一个脚本文件。 https://github.com/microsoft/vscode-python/issues/1062#issuecomment-372794910 谁会这样做? 完全是胡说八道。 - Fizz
对我来说它是可以工作的,如果它对你不起作用,我很抱歉。 - Daniel
这对我也起作用了。 - Portfedh

6
这对我有用:
将此内容包含在您的/.vscode/launch.json中。
{
    "name": "Python: Current File",
    "type": "python",
    "request": "launch",
    "program": "${file}",
    "console": "integratedTerminal",
    "justMyCode": false,
    "cwd": "${fileDirname}",
    "purpose": ["debug-in-terminal"]
}

Source.


"purpose": ["debug-in-terminal"] 是让它在我尝试了页面上的所有方法后才成功的关键! - Spangen

4

请注意,除非您在 Code 中将该目录作为工作区打开,否则此页面上的解决方案无法正常工作。如果您只是打开脚本,则这些答案都不起作用。

微软并不认为这是一个值得解决的问题。因为他们岛上的每个人都使用工作区而不是脚本,即使使用脚本语言也是如此。


3

我尝试了所有这些解决方案,但都没有效果。我的问题只是想要从Python的当前文件夹中访问文件,我解决了这个问题,通过在脚本开头添加以下代码:

os.chdir(os.path.dirname(__file__))


这个对我也起作用了,其他的都没有。 - Astrid

0
请将以下设置添加到您的settings.json文件中。
    "python.terminal.executeInFileDir": true,
    "code-runner.fileDirectoryAsCwd": true

我在Dr. S的解决方案中添加了Code Runner扩展中的"code-runner.fileDirectoryAsCwd": true设置。第一个设置仅在终端中运行时将工作目录设置为Python文件路径。但是,如果使用CTRL+ALT+N在输出选项卡中运行代码,则工作目录将恢复为根目录。这也可能是launch.json文件中任何设置(例如"cwd": "${fileDirname}")不起作用的原因,我也尝试过。第二个设置解决了这个问题,即使您选择在终端之外运行代码,也可以将工作目录设置为Python文件的路径。

0
我的解决方法(2023年1月16日)是进入“文件”>“首选项”>“设置”,然后在“搜索设置”字段中开始输入“执行文件”,顶部结果是“Python › 终端:在文件目录中执行”。对于调试环境无法发表评论。 注意:可以使用快捷键“Ctrl +,”访问“设置”。

截至[2023年2月28日],文件中没有任何偏好设置。 - Astrid
是的,今天(2023年1月3日)在VSCode 1.75.1上有。为了方便使用,我已经将默认快捷键添加到“设置”中。官方文档来自2/2/23:https://code.visualstudio.com/docs/getstarted/settings 不确定为什么您的缺失。 - Justin Case
多么奇怪啊。我在“文件”下面真的没有那个选项。我用的是Mac系统,而且版本也是1.75.1。这太奇怪了。 - Astrid
1
你可以在 Mac 上的 @Astrid 应用程序中找到它的代码。其余步骤相同。 - Jakob
很抱歉假定您使用的是Windows。无论如何,更新一下:https://code.visualstudio.com/docs/getstarted/settings 从2023年3月1日开始适用于VScode 1.76.0。但是,如果您打开了链接(根据您的屏幕大小和分辨率可能需要向下滚动一次),您会看到“在Windows / Linux”和“在macOS”上的一组说明。显然,我无法解释为什么Win / Lin和Mac不同。出于好奇,Ctrl +,(逗号)这个快捷键对您是否有效?Mac没有Ctrl,它可能是Cmd吧? - Justin Case

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接