如何修复相对导入错误:"with no known parent package"?



我已经尝试了几天来解决我项目中的相对导入错误,但没有成功。我有如下的项目树:

proj
|
|---__init__.py
|
|---lib
|    |---__init__.py
|    |---func.py
|
|---src
|    |---main.py
  • __init__.py为空文件。

  • func.py包含打印功能:

    def hello_func():
    print("Hello !!!")
    
  • main.py:

    from ..lib import *
    hello_func()
    

,当我运行它时,我收到这个错误:

ImportError: attempted relative import with no known parent package

有人遇到同样的问题吗?

from ..lib import *将指示python爬到main.py的父目录,在那里找到lib并从中导入所有内容-这是从空的init文件中导入的,因此也不会发生任何事情。您必须将其更改为from ..lib import func; func.hello_func()。这仍然会产生相同的错误。这个错误是由于python没有像我上面说的那样考虑目录。Python只会在启动它的工作目录(以及sys. js文件)中查找包。路径列表,但不要乱来)。你得到这个错误是因为你直接从src运行你的脚本——所以对于python来说,"文件系统"的根目录。是SRC -没有已知的(对python来说)父包(文件夹)。这是python中的反模式(从脚本的dir运行脚本)。你应该做的是

$ cd proj/..
$ python -m proj.src.main # note no .py

这使得proj文件夹成为"根"src.main告诉python main.py是src包和lib包的一部分(因为它们是proj的直接子包),当你像..lib那样进行相对导入时,python已经知道lib包了。

相关内容

  • 没有找到相关文章

最新更新