VSCode:如何用很少的模块和测试、调试和 linting 构建一个简单的 python 包?

问题描述 投票:0回答:2

在 Python 中构建一个简单的项目以使用 Visual Studio Code 进行开发时,我遇到的麻烦比我愿意承认的还要多。

我应该如何在我的文件系统中构造一个包含几个模块的简单 Python 包的项目?只是一堆 *.py 文件在一起。我的要求是:

  1. 我必须能够在 vscode 中对其进行单步调试。
  2. 它有一堆使用 pytest 的单元测试。
  3. 我可以选择从 vscode 选项卡调试特定测试,并且它必须在断点处停止。
  4. pylint 不得显示任何误报。
  5. 测试文件必须位于主模块文件的不同目录中。
  6. 我必须能够从控制台运行所有测试。
  7. 该模块使用 python 标准 lib 模块 venv 在虚拟环境中执行
  8. 代码将使用类型提示

我可能会使用另一个 linter,甚至另一个测试框架。

没什么特别的,但我真的很难把它做好。我想知道:

  • 我应该如何组织我的子目录:包含主文件的文件夹和包含测试的同级文件夹?或者包含代码的子文件夹和包含测试的子文件夹?
  • 哪些目录必须有 init.py 文件?
  • 测试应该如何从模块导入文件?我应该使用相对导入吗?
  • 我应该创建一个
    pytest.ini
    文件吗?
  • 我应该创建一个
    .env
    文件吗?
  • 我的
    launch.json
    vscode 中的调试器文件配置的内容是什么?
visual-studio-code pytest pylint vscode-debugger vscode-python
2个回答
1
投票

常用目录结构:

  • app
    • __init__.py
    • yourappcode.py
  • tests
    (pytest 寻找这个)
    • __init__.py
    • test_yourunittests.py
  • server.py
    如果你有的话
  • .env
  • .coveragerc
  • README.md
  • Pipfile
  • .gitignore
  • pyproject.toml
    如果你愿意的话
  • .vscode
    (有帮助)
    • launch.json
    • settings.json

或者你可以做得更好。忽略我的结构,看看一些著名的 python 项目的 github 页面。像fastAPI,Flask,asgi,aiohttp是我现在能想到的一些

还有:

  • 我认为绝对导入比相对导入更容易使用,但我可能是错的
  • vscode 可以使用 pytest。确保您有测试扩展。我很确定 Vscode 有一个内置的。您可以将其配置为 pytest 并指定您的测试目录。您还可以从命令行运行测试。如果您位于根目录,只需运行“pytest”即可识别您的测试目录(如果默认命名为该目录)。另外,我认为您的实际测试文件需要以前缀 test_ 开头。
  • launch.json 不需要有什么特别的。当您单击调试面板中播放按钮旁边的设置按钮时。 vscode 会询问它是什么类型的应用程序。即,如果它是 Flask 应用程序,请选择 python,然后选择 Flask,它将自动生成一个设置文件,您可以根据需要进行调整,以便让您的应用程序运行。即,也许您想公开不同的端口或者运行应用程序的命令不同
  • 在我看来,您只需要花一些时间根据您的特定 python 需求配置 vscode 即可。例如,您可以以任何您想要的方式使用 virtualenv 和 linting。您只需要在存储库的 .vscode 文件夹中有一个 settings.json 文件,您可以在其中指定设置。可以在网上找到指定 python virtualenv 和 linting 方法的配置

0
投票

几年后,我现在认为最好的选择是使用 Poetry 包和环境管理器。您必须仅使用

poetry new <my-package>
来开始您的项目,它将为您创建结构。

现在一切正常了。

© www.soinside.com 2019 - 2024. All rights reserved.