PyCharm提供“未解决的参考”消息,但可以运行代码

问题描述 投票:1回答:2

我正在运行一个带有玩具示例的PyCharm 2019.2.5。我具有以下目录结构:

├── main.py
├── a_package
│   ├── a_module.py

我的a_module.py文件看起来像这样:

class a_class:

    def __init__(self):
        self.a_variable = 5

我的main.py文件看起来像这样:

from a_package import a_module

x = a_module.a_class()
print(x.a_variable)

正在运行main.py输出5。这是预期的。但是,关于这一切,我有几个问题。

1]在main.pyfrom a_package import a_module行中,a_packagea_module的PyCharm下方都有一条红线。将鼠标悬停在该位置上会显示“未解析的引用'a_package'”和“未解析的引用'a_module'”。为什么会这样呢? PyCharm显然能够找到这些文件,因为代码可以正常运行。

我还尝试将目录a_package添加到“设置->项目->项目结构”中的“源”。但是,这不影响任何事情。 PyCharm仍然给我一条消息,说它找不到这些引用。根据有关源根目录的PyCharm文档,“这些根目录包含实际的源文件和资源。PyCharm使用源根目录作为解决导入的起点。”因此,即使在将此目录添加到源根目录之后,也很奇怪它给了我这个错误/警告。为什么会这样?

2)我经常看到与上面类似的结构,但是有一个空的__init__文件,如下所示:

├── main.py
├── a_package
│   ├── __init__.py
│   ├── a_module.py

我的理解是,这使a_package成为实际的Python包,而之前它只是一个包含Python文件的目录。但是为什么要这样做呢?为什么我不能不像以前一样拥有它,而没有__init__文件,而只是像上面一样导入模块?

python pycharm
2个回答
1
投票

1]当PyCharm的警告错误(尽管不常见)时,您可以通过剪切代码然后将其粘贴来修复它。您也可以尝试重新启动PyCharm。

2)

我的理解是,这使a_package成为实际的Python包,而之前只是一个包含Python文件的目录

我在这一点上同意你。

我能够导入没有__init__文件的模块,因此您也应该能够导入。


0
投票

这是PyCharm的问题,而不是python本身的问题,这就是您能够运行它的原因。选择源的根文件夹(大概是src),右键单击并选择“标记目录为->源根”。

© www.soinside.com 2019 - 2024. All rights reserved.