首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pylance的VSCode设置

Pylance的VSCode设置
EN

Stack Overflow用户
提问于 2020-12-08 22:22:02
回答 4查看 6K关注 0票数 1

我正在使用以下组件运行Vscode:

代码语言:javascript
复制
Version: 1.51.1 (user setup)
Commit: e5a624b788d92b8d34d1392e4c4d9789406efe8f
Date: 2020-11-10T23:34:32.027Z
Electron: 9.3.3
Chrome: 83.0.4103.122
Node.js: 12.14.1
V8: 8.3.110.13-electron.0
OS: Windows_NT x64 10.0.20270
Pylance 2.6

我有以下目录结构:

代码语言:javascript
复制
src
    m1.py
    .vscode
        settings.json
    lib
        m2.py
        .vscode
        settings.json

在开发Python代码时,我在这个环境中使用了几个linter。Mypy没有问题,但pylance无法解决导入问题。

pylance失败时,我正在尝试从m1.py导入模块m2.py。我在src目录下的settings.json文件是:

代码语言:javascript
复制
{
    "python.autoComplete.extraPaths": [
        "*.lib"
    ]
}

有谁能看到如何解决这个问题吗?

EN

回答 4

Stack Overflow用户

发布于 2020-12-11 12:56:39

python.autoComplete.extraPaths相反,Pylance使用python.analysis.extraPaths

代码语言:javascript
复制
{
    "python.analysis.extraPaths": [
        "*.lib"
    ]
}

你试过吗?

票数 5
EN

Stack Overflow用户

发布于 2020-12-11 22:37:56

如果您的VSCode工作区文件夹是src文件夹的父文件夹,那么Pylance抱怨是很正常的,因为在默认情况下,您的项目的根目录是您的工作区文件夹。您可以看到,如果我导入src.lib.m2Pylance不会报错,但如果我使用lib.m2,它就会报错

由于您在运行代码时不会出现运行时错误,因此我认为您在运行m1.py时位于src文件夹中。

如果我的假设不成立,您将需要添加更多细节(代码示例,如何运行m1.py文件)

票数 3
EN

Stack Overflow用户

发布于 2021-11-15 01:13:10

此方法符合标准Python项目打包准则

我推荐的设置是使子文件夹都是正确的python包。为此,在每个子文件夹中添加一个空的__init__.py文件,其中包含Python模块(即文件)。

使用原始设置,忽略.vscode文件夹:

代码语言:javascript
复制
src/
  __init__.py
  m1.py
  lib/
    __init__.py
    m2.py

代码语言:javascript
复制
import src.m1
import src.lib.m2

制作一个合适的scripts

代码语言:javascript
复制
src/
  scripts/
    __init__.py
    m1.py
  lib/
    __init__.py
    m2.py

这允许使用正确的包名引用所有包,而不是像import scripts.m1import lib.m2那样使用src

附注

如果您希望这些包成为“子包”,您可以在everything.

  • With文件夹中保留一个
  • ,使其成为更改的everything.
  • With的根文件夹。导入将是import src.scripts.m1import src.lib.m2.
  • Python将在父文件夹中向上移动,直到找到没有__init__.py文件的文件夹,然后从属于包的任何子文件夹(即,具有__init__.py文件)中以链的形式启动导入语句。
  • 此过程之后链接在一起作为包的任何文件夹都可以在本地访问,而无需添加到系统或Python路径。

如何从包中导入模块

在此方案下,m1.py脚本应该能够导入m2.py,如下所示。因为src不是一个包,所以从Python的角度来看,它是根目录,并且不包括在导入语句中。

代码语言:javascript
复制
# In scripts.m1
import lib.m2 as m2

m2.function_1()
a = m2.function_2(m2.symbol_1)

代码语言:javascript
复制
from lib.m2 import function_1, function_2, symbol_1

function_1()
a = function_2(symbol_1)

如果您在此设置中添加测试文件(例如,在scripts内的tests目录中),则可以将脚本函数导入为import scripts.m1 as m1from script.m1 import *

这个设置使得这个包符合python包的标准,所以如果你想让它成为可安装的或者上传到PyPi (或者通过压缩文件或者通过git repo私下分发它),你可以使用一个标准的setup.py文件使用setuptools包来定义和构建项目。请参阅Packaging Python Projects

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65200732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档