如何在 Visual Studio Code 中正确设置 python 源根目录?

grz*_*700 6 python configuration pycharm visual-studio-code

我正在尝试在 Visual Studio Code 中设置 python 项目。我的问题是创建和使用scr目录作为源根目录(就像它在 pycharm 中工作一样)。我有这个目录结构:

project_name\
  src\
    __init__.py
    dta\
      __init__.py
      dtapy.py
    tests\
      __init__.py
      tet.py
Run Code Online (Sandbox Code Playgroud)

我的问题发生在例如以下代码中:

import dta.dtapy
print('ok')
Run Code Online (Sandbox Code Playgroud)

我收到消息:

文件“.../project_name/scr/tests/tet.py”,第 1 行,在 import dta.dtapy ModuleNotFoundError: No module named 'dta'

我累了几个提示,如:

  • 添加.env文件: PYTHONPATH=src 到根目录
  • 设置launch.json"cwd": "${workspaceFolder}/src",

在 VS Code 中正确设置它的正确方法是什么?

Lau*_*oll 7

在 VSCode 中设置源文件夹需要一些努力。您需要为编辑器的 Python 环境和集成终端配置 PYTHONPATH,而不是通过 PyCharm UI 添加源文件夹。您需要对其进行两次配置,因为并非所有扩展都使用编辑器的 Python 环境来运行其命令。

编辑器的 Python 环境由 Python环境变量文件配置。默认情况下,这是在workspaceFolder/.env 中找到的

PYTHONPATH=./src
Run Code Online (Sandbox Code Playgroud)

集成终端由 Workspace 设置文件配置:.vscode/settings.json

{
  "terminal.integrated.env.osx": {
    "PYTHONPATH": "${workspaceFolder}/src",
  },
  "terminal.integrated.env.linux": {
    "PYTHONPATH": "${workspaceFolder}/src",
  },
  "terminal.integrated.env.windows": {
    "PYTHONPATH": "${workspaceFolder}/src",
  }
}
Run Code Online (Sandbox Code Playgroud)

更多信息:


ipa*_*eka -3

不是真正的答案,但仍然......

将该目录命名project_namesrc.

在该目录中__init__.py,创建__main__.py包含您的函数的文件main

def main():
    # call your app from here


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

这样您就可以从项目的根目录(第一个project_name)启动您的应用程序:

$ python -m project_name
Run Code Online (Sandbox Code Playgroud)

VS Code 的配置launch.json(单击“调试”部分中的齿轮图标)应如下所示:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Module",
            "type": "python",
            "request": "launch",
            "module": "project_name",
            "console": "integratedTerminal"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)