pycharm 2018中的相对导入不能像python 3.6中的相对导入一样工作

时间:2018-08-02 08:13:59

标签: pycharm

我已经阅读了有关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认为这是一个错误: enter image description here

因此,为了使PyCharm满意,我可以将.添加到导入中,然后似乎可以解决该错误:

from .AA import myfunc

但是后来python不高兴,给了我错误:ModuleNotFoundError: No module named '__main__.AA'; '__main__' is not a package

因此,总而言之,我使用了实际有效的导入(即from AA import myfunc),但是如果我可以以某种方式让PyCharm同意它,那就太好了,因为它随后提供了诸如自动完成,定义和等等。

不重复: 我知道似乎已经反复讨论了这个主题,但它也有很多方面。在这里,我谈论的是pycharm方面,因此据我所知这个主题是新的。

  1. How does PyCharm handle relative imports of modules?-是没有将根项目目录添加到PYTHONPATH的用户
  2. Pycharm auto relative imports-在这里讨论的不是自动导入功能
  3. Subpackages and relative imports in PyCharm-在python 2.7中谈论导入问题,但是在这里我没有任何导入问题
  4. Relative imports for the billionth time-对导入问题进行了很好的回顾,并且提供了非常详细的答案-在我看来,这没有帮助,因为我没有任何导入问题。更不用说这是python 2.7主题,而不是3.x

2 个答案:

答案 0 :(得分:6)

在项目树中右键单击,将subfolder标记为Source Root->将目录标记为...-> Sources Root。 PyCharm默认将所有源根添加到PYTHONPATH,因此该问题应得到解决

问题是PyCharm不知道您将直接执行BB.py,例如假设您在main.py的根目录中有from subfolder import BB。调用python main.py将引发ModuleNotFoundError: No module named 'AA'(请确保使用Python 3以避免从Python 2隐式相对导入)。

希望这很有意义,我什么都没错过。

答案 1 :(得分:1)

您可以使用

来使python和pycharm都同意
from subfolder.AA import myfunc

但是,根据herefrom .AA import myfunc似乎是正确的语法。但是idk为什么它不起作用。