【问题标题】:Using VS Code Python extension - How to install python modules to a permanent location outside of a virtual environment?使用 VS Code Python 扩展 - 如何将 python 模块安装到虚拟环境之外的永久位置?
【发布时间】:2020-03-05 14:28:19
【问题描述】:

我正在使用 Python 3.7 并使用 VS Code 作为我的 IDE。我安装了 Microsoft Python 扩展,并启用了 pylint 进行 linting 和 pytest 进行单元测试,将它们安装到系统 python37 脚本文件夹中,没有任何虚拟环境存在或处于活动状态。

此时,一切似乎都在工作。我的 Python37/Scripts 路径位于 Windows 系统 PATH 上,并且 pytest 和 pylint 主要脚本/exe 都存在于那里。 VS Code 可以找到并运行我的测试,并且 lints 很好。

现在,我为我正在处理的包安装一个虚拟环境,并将 Python 解释器更改为虚拟环境,名为 .venv

之后,我安装了我所有的包依赖项,一切似乎都在工作,但是 VS Code 弹出窗口告诉我 pylint 和 pytest 没有安装。

如果我单击yes 进行安装,它似乎会使用当前默认的python 可执行文件安装它们(在这种情况下,我的.venv 虚拟环境中的python 3.7),但使用--user 选项来安装它到用户Python\Python37\Scripts 文件夹(在\users\user\appdata\roaming 文件夹中),即使它已经存在于我的系统python37\Scripts 文件夹中,也就是在路径上(安装时未激活虚拟环境)。

但即使在让扩展程序按照它想要的方式安装它们之后,我仍然无法自动发现我的测试,当我尝试配置测试时,它再次尝试安装到用户目录。

--

所以,我想这一切都是要问的 - 这是 VS Code 的缺陷吗?

有什么方法可以将我想使用的标准 Python 工具安装在 VS Code 总能找到的永久位置,还是我必须将每个工具(例如 pylint 和 pytest)重新安装到我的每个虚拟环境中设置?

如果我手动将这些包安装到虚拟环境中,看起来一切正常。将它们(以及我计划在全球范围内使用的所有其他工具)安装到每个虚拟环境中是唯一的选择吗?

【问题讨论】:

  • Python 扩展使用通过-m 执行的工具,因此它将使用您的项目所依赖的特定版本。所以这是设计使然,而不是缺陷。正如您所发现的,如果您特别想使用安装到不同位置的工具,我们会为路径提供覆盖。实际上,我们曾经根据 PATH 来做这件事,人们一直要求它保持现在的样子(另外,更喜欢全局安装的工具还有其他复杂性)。
  • @BrettCannon 感谢您提供的信息!感谢您的时间分享它,并希望它在这种情况下对其他人有所帮助。我只需要制定一个利用这一点的设置。例如,可以使用包含我所有“标准”python 包的需求文件来轻松地将它们安装到任何新的虚拟环境中......
  • 最简单的方法是用你的产品定义你的requirements.txt,然后有一个dev-requirements.txt文件,它的第一行是-r requirements.txt,其余的是你的开发要求。
  • 如果未安装 PyTest 和 PyLint 等软件包,当它尝试在弹出窗口中自动安装时,我继续遇到与 VS Code 添加 --user 选项相同的问题。 VS Code(或 Python 扩展)应该安装到当前环境中(特别是如果为当前解释器选择了 venv!)。这只是他们从系统切换到用户安装作为范例时留下的过度热情,我认为...... :)
  • 如果您选择了一个作为活动环境/解释器,Pip 将使用扩展程序使用的命令安装到您的虚拟环境中。

标签: python visual-studio-code pytest pylint


【解决方案1】:

一个解决方案(但重新考虑这样做 - 见下文)

我确实找到了pylint 的解决方案,(虽然它有点笨拙)。

在全局 VS Code 设置中,对于 PyLint,搜索 pylintpath 的 VS Code 设置,然后找到下面列出的项目并将其填入您的用户或系统安装路径的pylint。在 Windows 中,它必须采用如下所示的格式,每个路径分隔符带有双反斜杠:

请注意,您还可以通过选择“设置”中的相应选项卡为给定的工作区或文件夹输入pylint 的绝对路径。

pytest 有一个类似的设置,其工作方式似乎相同。我在 pytest 发现和运行时遇到了一些“故障”(似乎每个测试运行两次),但它似乎确实有效。


Brett 的评论 - 重新考虑这一策略

基于 Brett Cannon 的 cmets,我将切换到仅在每个虚拟环境中安装我的开发包。这似乎是长期开发者的最佳实践。

当我考虑到我可能更喜欢的标准工具可能会因包而异时,这是有道理的,例如使用不同单元测试框架或不同 linter 的公共项目 - 因为该项目的所有开发人员都需要使用相同的工具避免工具碰撞(即考虑简单的差异,例如间距或缩进的工作方式,不同的 linter 以不同的方式抱怨)。

为每个虚拟环境安装开发工具的解决方案

一种解决方案是创建一个requirements-dev.txt 文件,其中包含您使用的所有开发工具包,可以使用python -m pip install -r requirements-dev.txt 安装。

这提供了一种方法,可以单独列出某人从事该项目所需的开发工具列表,该列表是可分发的,但与标准用户安装要求分开。

他还建议您可以菊花链式连接需求文件。例如,requirements-dev.txt 的第一行可以是-r requirements.txt,它将安装正常需求文件中的所有内容,然后是第一行之后的所有剩余开发需求。这将使用单个命令安装普通和开发依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2016-11-11
    • 2022-10-13
    • 2018-11-01
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多