【问题标题】:Debug Python with VSCode Remote - Containers使用 VSCode Remote 调试 Python - 容器
【发布时间】:2020-02-24 08:56:17
【问题描述】:

我正在运行带有 Python 应用程序和 WSGI 配置的容器,它接受一堆 GET 参数。目标是通过浏览器(或 curl)请求应用程序并使用 VSCode Remote - Containers 扩展程序获取工作断点。

主机操作系统:Fedora 28,容器操作系统:CentOS 7

Docker 详细信息:

- Docker v18.09.9
- No Dockerfile(just running container)
- Docker network using
- Container IP is 172.18.0.2
- App directory is mounted from host filesystem

应用详情:

- No frameworks
- Just Python3 with several modules
- Virtual environment using

IDE 详细信息:

- VSCode v1.38.1
- Remote - Containers extension
- Python extension(installed in attached container also)

在 VSCode 中我可以Attach to Running Container,然后打开之前安装的应用程序目录并编辑代码、安装包等。没关系,但我坚持调试配置,预定义项目(Flask、Django 等)与我的工作流程不匹配.

如何为此目的调整 launch.json 文件?

【问题讨论】:

  • 您可以开始在容器功能中使用打开文件夹:code.visualstudio.com/docs/remote/…
  • 我试过 vscode-remote-try-python,它可以工作,但不符合我的情况。我有自己的为特定目的配置的容器。

标签: python-3.x docker visual-studio-code remote-debugging vscode-remote


【解决方案1】:

您应该指定您正在使用的网络框架。我正在使用金字塔,调试效果很好。

我是这样做的:

  • 如您所说,附加到正在运行的容器
  • 使用“打开文件夹...”打开应用程序源所在的路径。您不应该向工作区添加更多文件夹,否则将无法正常工作。
  • 在正在运行的容器中安装 Python 扩展。如果你打开扩展栏,你应该有一个按钮说Install in attached container...
  • 从命令面板中选择View: Show Debug
  • 单击调试配置中的齿轮图标,您应该可以选择Python 作为语言。
  • 无论哪种方式,您最终都会得到一个可以编辑的 launch.json 文件。

这是我在文件中的 Pyramid:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Pyramid Application",
            "type": "python",
            "request": "launch",
            "module": "pyramid.scripts.pserve",
            "args": [
                "--reload",
                "--server-name",
                "docker",
                "${workspaceFolder}/development.ini"
            ],
            "pyramid": true,
            "jinja": true,
            "justMyCode": false,
        }
    ]
}

注意"justMyCode": false,。如果您的项目依赖于在构建容器时安装的其他本地项目,这一点非常重要。

例如,如果您在需求文件中有对 git 存储库的引用,它将安装在系统目录中,并且默认情况下调试器不会单步执行那里的功能。此选项使调试器进入其中。

【讨论】:

  • 如问题中所述,我不使用任何框架。我需要的所有东西 - 只需 WSGI 可调用几个导入的包和 Apache mod_wsgi 用于请求处理。
  • 如果您不使用任何框架,它应该更容易,只需将pserve 命令替换为您用于启动应用程序的任何命令
  • 我指定了 WSGI callable 的完整路径并得到了错误:/home/www/sile/.venv/bin/python /root/.vscode-server/extensions/ms-python.python-2019.10.44104/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 37153 -m /home/www/sile/wsgi/app.py E00000.174: Error determining module path for sys.argv
  • program 更适合我的情况吗?
  • 看起来是这样,但仍然不清楚您的用例到底是什么。如果您不在容器中,您会使用什么命令来启动您的应用程序?此外,您似乎将完整路径放在了 launch.json 文件的 module 条目中,这不是您想要的。如果在命令行中您所做的只是python app.py,您只需删除module 条目并输入"args": ["app.py"]。您基本上需要重现您使用的命令行
猜你喜欢
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
相关资源
最近更新 更多