我正在使用以下组件运行Vscode:
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我有以下目录结构:
src
m1.py
.vscode
settings.json
lib
m2.py
.vscode
settings.json在开发Python代码时,我在这个环境中使用了几个linter。Mypy没有问题,但pylance无法解决导入问题。
当pylance失败时,我正在尝试从m1.py导入模块m2.py。我在src目录下的settings.json文件是:
{
"python.autoComplete.extraPaths": [
"*.lib"
]
}有谁能看到如何解决这个问题吗?
发布于 2020-12-11 12:56:39
与python.autoComplete.extraPaths相反,Pylance使用python.analysis.extraPaths。
{
"python.analysis.extraPaths": [
"*.lib"
]
}你试过吗?
发布于 2020-12-11 22:37:56
如果您的VSCode工作区文件夹是src文件夹的父文件夹,那么Pylance抱怨是很正常的,因为在默认情况下,您的项目的根目录是您的工作区文件夹。您可以看到,如果我导入src.lib.m2,Pylance不会报错,但如果我使用lib.m2,它就会报错

由于您在运行代码时不会出现运行时错误,因此我认为您在运行m1.py时位于src文件夹中。
如果我的假设不成立,您将需要添加更多细节(代码示例,如何运行m1.py文件)
发布于 2021-11-15 01:13:10
此方法符合标准Python项目打包准则
我推荐的设置是使子文件夹都是正确的python包。为此,在每个子文件夹中添加一个空的__init__.py文件,其中包含Python模块(即文件)。
使用原始设置,忽略.vscode文件夹:
src/
__init__.py
m1.py
lib/
__init__.py
m2.pyimport src.m1
import src.lib.m2制作一个合适的scripts包
src/
scripts/
__init__.py
m1.py
lib/
__init__.py
m2.py这允许使用正确的包名引用所有包,而不是像import scripts.m1和import lib.m2那样使用src。
附注
如果您希望这些包成为“子包”,您可以在everything.
import src.scripts.m1,import src.lib.m2.__init__.py文件的文件夹,然后从属于包的任何子文件夹(即,具有__init__.py文件)中以链的形式启动导入语句。如何从包中导入模块
在此方案下,m1.py脚本应该能够导入m2.py,如下所示。因为src不是一个包,所以从Python的角度来看,它是根目录,并且不包括在导入语句中。
# In scripts.m1
import lib.m2 as m2
m2.function_1()
a = m2.function_2(m2.symbol_1)或
from lib.m2 import function_1, function_2, symbol_1
function_1()
a = function_2(symbol_1)如果您在此设置中添加测试文件(例如,在scripts内的tests目录中),则可以将脚本函数导入为import scripts.m1 as m1或from script.m1 import *。
这个设置使得这个包符合python包的标准,所以如果你想让它成为可安装的或者上传到PyPi (或者通过压缩文件或者通过git repo私下分发它),你可以使用一个标准的setup.py文件使用setuptools包来定义和构建项目。请参阅Packaging Python Projects
https://stackoverflow.com/questions/65200732
复制相似问题