我已经阅读了很多有关Python相对导入的讨论,我认为它令人困惑的原因之一是它在不同的Python版本中会有所改变(我的版本是3.6)。但是这里罪魁祸首似乎是PyCharm(除非我错了..),我想知道是否有人解决了这个问题。 对于这种布局的项目:
/project
|-- __init__.py
|---subfolder
|-- __init__.py
|-- AA.py
|-- BB.py
假设AA.py文件里有一个名为myfunc
的函数。现在我们在文件BB.py
中写入以下导入语句:
from AA import myfunc
然后Python可以完美地运行,但PyCharm将其视为一个错误:
所以为了让PyCharm满意,我可以在导入语句中加上.
,然后这个错误似乎就得到了解决:
from .AA import myfunc
但是Python并不满意,给了我一个错误:ModuleNotFoundError: No module named '__main__.AA'; '__main__' is not a package
因此,总结一下,我使用实际可行的导入方式(即from AA import myfunc
),但如果PyCharm能够以某种方式同意它,那将会很棒,因为这样可以提供自动完成、转到定义等功能。
不重复: 我知道似乎这个主题已经被反复讨论过很多次,但它也有许多方面。在这里,我谈论的是PyCharm方面的问题,因此就我所知,这个话题是新的。
- PyCharm如何处理模块的相对导入? - 是一个没有将根项目目录添加到PYTHONPATH中的用户
- PyCharm自动进行相对导入 - 谈论的是自动导入功能,而这里不是这种情况
- PyCharm中的子包和相对导入 - 谈论的是Python 2.7中的导入问题,而在这里我没有任何导入问题
- 相对导入又来了一次 - 提供了一个有关导入问题的很好的评论,并提供了非常详细的答案,但它都不能帮助我的情况,因为我没有任何导入问题。更不要说它是Python 2.7的主题,而不是3.x的主题了。
from .AA import myfunc
不起作用,因为__package__
没有定义。我们该怎么解决这个问题? - flow2k