即使激活了虚拟环境,Python脚本也会查看系统环境

uemypmqf  于 2022-09-18  发布在  Java
关注(0)|答案(1)|浏览(182)

在Windows和Python3.9x中运行VS代码

我创建了一个新的项目文件夹,并为此项目创建了一个新的虚拟环境。我创建的第一个脚本是一个.ipynb文件(jupyter笔记本),它运行得很好。当我将脚本导出到.py文件时,它在代码的第一行生成一个错误:

from pynput import keyboard

ModuleNotFoundError:没有名为‘pynput’的模块

Pynput库安装在这个虚拟环境中,这就是.ipynb文件运行良好的原因。当我查看VS代码的右下角时,我可以看到虚拟环境被激活:

并在终端提示符前加上(proj_env)。当我运行pip list时,我可以看到pynput包已经安装。它没有安装在系统环境中,这就是为什么我猜测该脚本试图使用系统环境,但我可能错了。

我遗漏了什么?

从评论中描述的测试来看,可能与Windows CMD窗口(运行虚拟环境)检查脚本想要导入的包的特定路径与VS代码检查特定路径之间的差异有关。

e1xvtsh3

e1xvtsh31#

弄清楚了这个问题,当我问这个问题的时候,我并不是很理解,然后一个(那个?)决议。如果这个答案有任何错误,请纠正(并教育)我,谢谢。

在VSCode中,“运行代码”(使用CodeRunner扩展)和“运行Python文件”(这是终端中的运行文件)是不同的。播放按钮将使用上次运行的任何一个(打开播放按钮旁边的下拉框)。

我遇到了与此用户相同的问题:Run Code vs Run Python File in Terminal for VSCODE

项目的settings.json文件指定了指向虚拟环境的python.exe的“python.defaultInterpreterPath”。因此,当我在终端中运行.py文件时,会发现仅安装在虚拟环境(而不是全局/系统环境)中的包。

但Run Code使用Code-Runner,它默认为全局环境的python.exe,因此找不到仅存在于虚拟环境中的包。解决方案是指定Code-Runner应该使用哪种环境,方法是将此代码添加到settings.json文件:"code-runner.executorMap": { "python": "\"$pythonPath\" $fullFileName", }。因为我的settings.json文件已经指定了虚拟环境的python解释器,所以此代码片断将告诉Code-Runner使用相同的python解释器来执行代码。

相关问题