pycharm 2018中的相对导入与python 3.6中的相对导入不同
我读过无数关于python中相对导入的讨论,我认为它如此混乱的原因之一是它从一个python版本更改为另一个(我的版本是3.6)。但这里的罪魁祸首似乎是PyCharm(除非我弄错了…),我想知道是否有人找到了这个问题的解决方案。 对于具有此布局的项目:pycharm 2018中的相对导入与python 3.6中的相对导入不同,pycharm,Pycharm,我读过无数关于python中相对导入的讨论,我认为它如此混乱的原因之一是它从一个python版本更改为另一个(我的版本是3.6)。但这里的罪魁祸首似乎是PyCharm(除非我弄错了…),我想知道是否有人找到了这个问题的解决方案。 对于具有此布局的项目: /project |-- __init__.py |---subfolder |-- __init__.py |-- AA.py |-- BB.py 让我们
/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
。我们如何解决这个问题?如果为导入文件指定了子目录,那么在没有源根标记的情况下它也可以工作。