从同级子包导入时出现未解决的引用错误

10

我有以下类似的目录结构。

main.py
pack
   |___sub_pack1
                |__a.py
   |___sub_pack2
                |__b.py

现在在我的主程序main.py中(我执行的程序)我按如下方式导入:

from pack.sub_pack1 import a

运行正常。

在 a.py 文件中,我按照如下方式进行导入:

from pack.sub_pack2 import b

此时,PyCharm将上述代码下划线为红色,并通知我“未解决的引用包”。

现在我的代码正在正常工作。我很好奇为什么PyCharm认为这是错误,我该如何避免这种情况。


似乎PyCharm因某种原因希望您在包中有一个__init__.py,以使非本地导入起作用。这在技术上对于Python包是强制性的,但实际上并未被解释器验证,并且显然是不一致的,这取决于PyCharm查找解析导入的位置方式。 - millimoose
话虽如此,你应该向JetBrains报告这个bug,我有非常好的经验,他们能够快速解决这样的问题。 - millimoose
1
我肯定已经添加了__init__.py文件。我在PyCharm论坛上寻求了帮助。如果我得到任何答案,我会进行更新。 - Ansuman Bebarta
这里也有同样的问题:一个兄弟子包(当然带有__init__.py)与PyCharm项目的命名空间相同,但是PyCharm检查未将其识别为此类,尽管代码运行正常。下面提出的两个解决方案对我不起作用,因为兄弟子包不是源代码的一部分,而是位于Python27\Lib\site-packages文件夹中。 - kadee
2个回答

31

如果您在PyCharm中遇到“未解决的引用”错误,可以尝试以下操作:

  • 右键单击Python源目录
  • 选择“标记目录为” > “源根目录”

请确保对所有Python源目录都执行此操作。


1
谢谢您提到“源根”。它解决了我在PyCharm中遇到的问题。 - LoveGandhi
3
记得在此之后执行 文件 - 无效缓存/重启 - Patrizio Bertoni
是的,对我来说,精确的操作是将pack/目录标记为源根目录,然后使缓存失效并重新启动。这些操作一起使事情正常工作。版本:IntelliJ IDEA 2023.2,带有Python插件232.8660.185。 - 0xbe5077ed

5

前往设置-> 项目结构,将sub_pack2设置为源目录。


这对我有用!只需确保将所有子包的所有src文件夹添加为项目结构设置中的源文件夹即可。 - chris LB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接