【问题标题】:How to proper setup python source root direcory in Visual Studio Code?如何在 Visual Studio Code 中正确设置 python 源根目录?
【发布时间】:2019-07-23 14:21:25
【问题描述】:

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

project_name\
  src\
    __init__.py
    dta\
      __init__.py
      dtapy.py
    tests\
      __init__.py
      tet.py

我的问题发生在例如使用此代码:

import dta.dtapy
print('ok')

我收到消息:

文件“.../project_name/scr/tests/tet.py”,第 1 行,在 导入数据.dtapy ModuleNotFoundError: 没有名为“dta”的模块

我厌倦了几个技巧,例如:

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

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

【问题讨论】:

  • 这里有同样的问题。很难相信似乎没有直接的文档可以做到这一点。

标签: python visual-studio-code configuration pycharm


【解决方案1】:

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

编辑器的 Python 环境由 Python environment variables file 配置。默认情况下,它位于 workspaceFolder/.env

PYTHONPATH=./src

集成终端由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",
  }
}

更多信息:

【讨论】:

    【解决方案2】:

    我没有使用任何 __init__.py 文件,并且您的项目使用此 project_name\.vscode\launch.json 在 Visual Studio Code 中运行良好:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python: Current File",
                "type": "python",
                "request": "launch",
                "program": "${file}",
                "console": "integratedTerminal",
                "env": {
                    "PYTHONPATH": "${workspaceFolder}/src"
                }
            }
        ]
    }
    

    注意添加了PYTHONPATH 环境变量。它与通过将 src 目录标记为 PyCharm 中的 Sources Root 来设置的相同,尽管从技术上讲是

     'PYTHONPATH': 'C:\\Users\\Cees\\PycharmProjects\\testimport;C:\\Users\\Cees\\PycharmProjects\\testimport\\src;C:\\Program '
                   'Files\\JetBrains\\PyCharm '
                   '2020.2.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend;C:\\Program '
                   'Files\\JetBrains\\PyCharm '
                   '2020.2.3\\plugins\\python\\helpers\\pycharm_display',
    

    根据pprint(dict(os.environ))

    【讨论】:

      【解决方案3】:

      使用具有相对路径的.env 文件更改您当前的工作可能会造成混乱。我只会使用.env 文件。同时删除 src/__init__.py 文件,因为它是不必要的。最后,我会将您的tests/ 目录从src/ 上移出,这样它就在它旁边,否则它可能应该在dta/ 下,然后使用相对导入。

      【讨论】:

        【解决方案4】:

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

        将该目录命名为 project_name 而不是 src

        与该目录中的__init__.py 一起,在其中创建带有main 函数的__main__.py 文件:

        def main():
            # call your app from here
        
        
        if __name__ == "__main__":
            main()
        

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

        $ python -m project_name
        

        你的 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"
                }
            ]
        }
        

        【讨论】:

          猜你喜欢
          • 2018-10-09
          • 2020-06-19
          • 2019-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-23
          • 2016-07-06
          • 1970-01-01
          相关资源
          最近更新 更多