pycharm 2018中的相对导入与python 3.6中的相对导入不同

pycharm 2018中的相对导入与python 3.6中的相对导入不同,pycharm,Pycharm,我读过无数关于python中相对导入的讨论,我认为它如此混乱的原因之一是它从一个python版本更改为另一个(我的版本是3.6)。但这里的罪魁祸首似乎是PyCharm(除非我弄错了…),我想知道是否有人找到了这个问题的解决方案。 对于具有此布局的项目: /project |-- __init__.py |---subfolder |-- __init__.py |-- AA.py |-- BB.py 让我们

我读过无数关于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:没有名为“\uuuu main\uuuu.AA”的模块__main__u;不是一个包

最后,我使用了实际有效的导入(即AA import myfunc的
),但如果我能让PyCharm以某种方式同意它,那就太好了,因为它提供了自动完成、转到定义等功能

不重复: 我知道这个问题似乎被反复讨论过,但它也有很多方面。在这里,我谈论的是pycharm方面,因此就我所知,这个话题是新的

  • -是未将根项目目录添加到PYTHONPATH的用户
  • -正在谈论的是自动导入功能,而不是这里的情况
  • -正在讨论python 2.7中的导入问题,但在这里我没有任何导入问题
  • -对进口问题进行了详细审查,并提供了非常详细的答案-对我的情况没有任何帮助,因为我没有任何进口问题。更不用说它是Python2.7主题,而不是3.x

  • 通过使用

    from subfolder.AA import myfunc
    

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

    在项目树中单击鼠标右键,将
    子文件夹标记为源根目录->将目录标记为…->根源。默认情况下,PyCharm将所有源根添加到
    PYTHONPATH
    ,因此问题应该得到解决

    问题是PyCharm不知道您将直接执行
    BB.py
    ,例如,假设您在根目录中有
    main.py
    ,其中包含子文件夹import BB
    。调用
    python main.py
    将引发
    ModuleNotFoundError:没有名为“AA”的模块
    (请确保使用python 3以避免从python 2隐式导入相对对象)


    希望它有意义,我没有错过任何东西。

    但似乎相对导入的版本,
    from.AA import myfunc
    ,将无法工作,因为未定义
    \uuuuuuuu package\uuuuu
    。我们如何解决这个问题?如果为导入文件指定了子目录,那么在没有源根标记的情况下它也可以工作。