我使用以下结构的VSCode打开了一个目录(在WSL Ubuntu上):
import os
import queue
import sys
import cv2
import dlib
from multiprocessing import Queue, Process
from PyQt5.Qt import *
from numpy.core.multiarray import ndarray
class CheckDone(QThread):
done = pyqtSignal(ndarray) # ndarray
def __init__(self, proces_queue):
super(CheckDone, self).__init__()
self.process_queue = proces_queue
def run(self) -> None:
while True:
try:
image = self.process_queue.get(block=False)
self.done.emit(image)
return
except queue.Empty:
pass
def proc(q):
path = os.path.dirname(os.path.abspath(__file__))
image = cv2.imread(os.path.join(path, '..', 'Resources', 'snowIceLakeMountains.jpg'))
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
detector = dlib.get_frontal_face_detector()
done = detector(gray, 2)
q.put(image)
class ExampleApp(QMainWindow):
def __init__(self, q):
super().__init__()
self.q = q
self.test_button = QPushButton(self)
self.test_button.clicked.connect(self.start)
self.checker = None
def handler_function(self, image):
cv2.imshow('test', image)
def start(self):
p = Process(target=proc, args=(self.q, ))
self.checker = CheckDone(self.q)
self.checker.done.connect(self.handler_function)
self.checker.start()
p.start()
if __name__ == '__main__':
pq = Queue()
app = QApplication(sys.argv)
window = ExampleApp(pq)
window.show()
app.exec_()
当导入与调用它的目录相同的目录中的文件时,收到警告消息.
├── .vscode
│ ├── launch.json
│ └── settings.json
├── src
│ └── polls
│ ├── aiohttpdemo_polls
│ │ ├── db.py
│ │ ├── main.py
│ │ ├── routes.py
│ │ ├── settings.py
│ │ └── views.py
│ ├── config
│ │ └── polls.yaml
│ └── init_db.py
└── ve_websocket
。例如:对于unresolved import ...
routes.py
我得到from views import index
def setup_routes(app):
app.router.add_get("/", index)
。因此,用于unresolved import 'views' Python(unresolved-import)
功能的 IntelliSense 不起作用。
但是IntelliSense建议使用这种表示法:
index
现在from polls.aiohttpdemo_polls.views import index
函数已被IntelliSense识别,并且没有警告消息出现,但是在保存文件时,我现在收到此错误消息index
。
所以我无法运行此脚本:
Unable to import 'polls.aiohttpdemo_polls.views' pylint(import-error)
我的[polls]$ python init_db.py
文件具有以下配置:
settings.json
答案 0 :(得分:1)
解决方案1: settings.json
该解决方案是关于使用absolute imports(由IntelliSense建议),并且有必要使用PYTHONPATH环境变量,因此我们需要将这些行添加到settings.json
文件中作为工作区。
"terminal.integrated.env.linux": {
"PYTHONPATH": "${workspaceFolder}/src",
},
此后,我们从VSC打开终端,需要确认更改,然后重新打开终端,我们可以运行脚本而不会出现错误,但是VSC IDE仍然在from
关键字上显示错误标记,忽略它们,因为IntelliSense可以识别所有导入的对象及其所有属性,因此您可以毫无问题地运行脚本。
解决方案2: sys.path
以前的解决方案的问题在于它仅在使用VSC的终端时才有效。因此,您可以在每个需要导入对象的脚本中使用sys.path
。例如,对于我的init_db.py
文件:
import sys
from pathlib import Path
sys.path.append(str(Path.cwd().parent))
from sqlalchemy import create_engine, MetaData
from polls.aiohttpdemo_polls.settings import config
from polls.aiohttpdemo_polls.db import question, choice
...