我正在运行一个带有玩具示例的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.py
的from a_package import a_module
行中,a_package
和a_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__
文件,而只是像上面一样导入模块?
1]当PyCharm的警告错误(尽管不常见)时,您可以通过剪切代码然后将其粘贴来修复它。您也可以尝试重新启动PyCharm。
2)
我的理解是,这使a_package成为实际的Python包,而之前只是一个包含Python文件的目录
我在这一点上同意你。
我能够导入没有__init__文件的模块,因此您也应该能够导入。
这是PyCharm的问题,而不是python本身的问题,这就是您能够运行它的原因。选择源的根文件夹(大概是src),右键单击并选择“标记目录为->源根”。