【问题标题】:Import errors on VS codeVS 代码上的导入错误
【发布时间】:2021-01-21 00:52:20
【问题描述】:

我是 VS 代码的新手。我已经下载了一个 git 项目,其中包含可以运行的演示程序。

目录结构如下:

Projectparser

>demo
>>alg1_demo.py
>>alg2_demo.py
>>alg3_demo.py

>Projectparser

>>alg1
>>>__init__ [ Has just one line : from alg1 import * ]
>>>alg1.py
>>>calg1.c
>>>calg1.h

>>alg2
>>>__init__ [ Has just one line : from alg2 import * ]
>>>alg2.py
>>>calg2.c
>>>calg2.h

>>alg3
>>>__init__ [ Has just one line : from alg3 import * ]
>>>alg3.py
>>>calg3.c
>>>calg3.h

其中 > 表示子目录。 Projectparser 是我打开 vs 代码的文件夹。它还有一个同名的子目录,其中包含我感兴趣的所有算法。

当我尝试运行 alg1_demo.py 时。以下行导致错误。

sys.append("../")
from Projectparser import alg1 (line 8) 

我收到以下错误: ImportError: cannot import name 'alg1' from 'Projectparser' (unknown location)

所以我添加了这一行: sys.path.append("../Projectparser")

然后我收到以下错误:

File "/home/suneha/Projectparser/demo/alg1_demo.py", line 8, in <module>
    from Projectparser import alg1
  File "../Projectparser/Projectparser/alg1/__init__.py", line 1, in <module>
    from alg1 import *
ModuleNotFoundError: No module named 'alg1'

但该模块存在于子目录中。所以我添加了这一行:

sys.path.append("../Projectparser/Projectparser/alg1")

然后我收到此错误:

Traceback (most recent call last):
  File "/home/suneha/Projectparser/demo/alg1_demo.py", line 8, in <module>
    from Projectparser import alg1
  File "../Projectparser/Projectparser/alg1/__init__.py", line 1, in <module>
    from alg1 import *
  File "/home//Projectparser/Projectparser/alg1/alg1.py", line 13, in <module>
    from ..logmatch import regexmatch
ImportError: attempted relative import with no known parent package

对于所有三种算法 alg1、alg2、alg3,同样的问题仍然存在。我不确定如何解决这个问题,并且使用 sys.append.path() 是解决上述问题的最佳方法。

谁能建议如何解决最终的导入错误:ImportError: attempted relative import with no known parent package

如果有任何其他紧凑的方法来解决其他导入错误,而不是使用 sys.path.append()。

提前致谢

【问题讨论】:

    标签: python python-3.x visual-studio-code python-import importerror


    【解决方案1】:

    使用以下语句将需要导入的文件的路径添加到系统路径中,以帮助VSCode找到它:

    import os,sys 
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    

    以下是您提供的我创建的项目的一部分:

    结果:

    需要注意以下几点:

    1. 导入时子文件夹以.连接

    2. 请避免使用同名的文件和文件夹,以免 VSCode 查找模块时混淆。

    3. 如果结果可以执行但还是有波浪线,可以添加settings.json:"python.linting.pylintArgs": [ "----extension-pkg-whitelist=1xml" ],

    更新

    根据你提供的链接代码,我在本地重现了你描述的问题,解决方法如下:

    1. 注释掉 logparser-master\logparser\SLCT_init_.py 的内容“from SLCT import *”。

    2. 添加import os,syssys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))SLCT_demo.py

    运行结果:

    【讨论】:

    • 我添加了该行,但没有帮助。我正在使用从 github 下载的 logparser 包:github.com/logpai/logparser。这些是我在上述项目中尝试运行 SLCT_demo.py 文件时遇到的错误。
    • @suneha k s -你改变了“从 Projectparser.alg1 导入 alg1”吗?
    • 是的,错误仍然存​​在: Traceback(最近一次调用最后一次):文件“/home/suneha/logparser/demo/SLCT_demo.py”,第 10 行,在 中来自 logparser.SLCT 导入SLCT 文件“../logparser/logparser/SLCT/__init__.py”,第 1 行,在 中来自 SLCT import * 文件“/home/suneha/logparser/logparser/SLCT/SLCT.py”,第 13 行,在 from ..logmatch import regexmatch ImportError: 在没有已知父包的情况下尝试相对导入
    • @suneha ks -我更新了我的回答内容,大家可以参考一下。
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多