在WSL上运行VSCode交互窗口,使用相对导入

huangapple go评论61阅读模式
英文:

Running VSCode interactive window on WSL with relative imports

问题

我试图使用pyplot的imshow函数来可视化图表。Windows的WSL不支持GUI,所以建议的方法是通过VSCode的交互窗口来实现。然而,鉴于我的项目结构,唯一能运行我的代码的方式是使用终端(python3 -m mycode.predict),但由于WSL的原因,什么都不会绘制。以下是我的导入部分:

import matplotlib.pyplot as plt
import numpy as np
import torch
from dataset import MyDataset
from model import get_instance_segmentation_model
from PIL import Image
from torchvision.transforms import functional as F
from torchvision.utils import draw_bounding_boxes, draw_segmentation_masks
from train import get_transform

from vision.references.detection import transforms as T

我按照这里的说明进行操作,但在尝试通过VSCode的“播放”按钮运行或作为交互窗口运行时仍然出现ModuleNotFoundError: No module named 'vision'的错误,尽管自动完成工作,没有任何突出显示问题(“在工作区中没有检测到问题”)。我在这里做错了什么?以下是我的launch.json配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Module",
            "type": "python",
            "request": "launch",
            "module": "mycode",
            "env": {"PYTHONPATH": "${workspaceFolder}/vision/"}
        }
    ]
}
英文:

I'm trying to visualize plots using pyplot imshow. Windows' WSL does not work with GUIs so the advised way of doing so is via VSCode's interactive window. However, given my project structure,

$projectFolder
├── mycode
│   ├── __init__.py
│   ├── model.py
│   ├── dataset.py
│   ├── train.py
│   └── predict.py
└── vision
    └── references
        └── detection
            ├── utils.py
            ├── transforms.py
            ├── engine.py
            └── etc

the only way I can run my code is using the terminal (python3 -m mycode.predict), but then again nothing is plotted because of WSL. Here are my imports:

import matplotlib.pyplot as plt
import numpy as np
import torch
from dataset import MyDataset
from model import get_instance_segmentation_model
from PIL import Image
from torchvision.transforms import functional as F
from torchvision.utils import draw_bounding_boxes, draw_segmentation_masks
from train import get_transform

from vision.references.detection import transforms as T

I followed this exactly but still get ModuleNotFoundError: No module named 'vision' when trying to run via the VSCode 'play' button and/or as interactive window, even though autocomplete works and nothing is highlighted ("No problems have been detected in the workspace"). What am I doing wrong here? Here's my 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": "mycode",
            "env": {"PYTHONPATH": "${workspaceFolder}/vision/"}
        }
    ]
}

答案1

得分: 1

我建议您使用 .env 文件。以下是一张表格,解释了 .envlaunch.json 之间的区别:

运行选项 .env 设置 launch.json 设置
在终端中运行 Python 文件
在交互式窗口中运行
通过 F5 调试
"调试 Python 文件" (*)

如果您使用交互式窗口,那么 launch.json 中的设置将不起作用。

您可以在工作空间下创建一个 .env 文件,然后将 "python.envFile": "${workspaceFolder}/.env" 添加到您的 settings.json 中。

.env

PYTHONPATH=您的文件夹路径

英文:

I suggest you using .env file. Here is a table which explains the difference between .env and launch.json:

Run option .env setting launch.json setting
Run Python file in terminal no no
Run in interactive Window yes no
Debug via F5 yes yes
"Debug Python File" (*) yes no

If you use interactive Window, the settings in launch.json will not work.

You can create .env file under your workspace then add "python.envFile": "${workspaceFolder}/.env", to your settings.json.

.env

PYTHONPATH=PATH/TO/YOUR/FOLDER

huangapple
  • 本文由 发表于 2023年3月7日 03:01:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/75654809.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定