Intellij IDEA无法识别python 3中本地类的导入

Intellij idea won't recognize import of local class in python 3

本问题已经有最佳答案,请猛点这里访问。

我有一个python3脚本script.py,在其中我想实例化一个类foobar,它在clazz.py中定义。但是,当我尝试导入时,我得到:

1
2
3
$ python3 script.py
...
SystemError: Parent module '' not loaded, cannot perform relative import

这是我的文件结构:

1
2
3
4
python_import/
├── __init__.py
├── clazz.py
└── script.py

PrasZ.Py:

1
2
3
class Foobar():
    def __init__(self):
        print("initialized a foobar")

Pyp.Py:

1
2
from .clazz import Foobar
foobar = Foobar()

如果我去掉了import中的.,它运行得很好;但是,如果我这样做,我的ide(intellij-idea)红色突出了导入,不会自动完成任何东西。我相信在python3中包含EDOCX1[0]是正确的,intellij似乎很喜欢它,所以为什么我的程序不删除它就不能运行呢?

我已经阅读了http://www.diveintopython3.net/porting-code-to-python-3-with-2to 3.html import,http://python.readthedocs.org/en/latest/reference/import.html,如何在同一目录或子目录中导入类?,python 3中的相对导入和python 3中的相对导入不工作。

我怀疑这可能与virtualenv有关,但a)我不明白为什么工作目录不属于pythonpath,b)我不确定如何在virtualenv中更改它-intellij为我设置它。


您的IDE喜欢.的原因是它知道您的脚本在包python_import/中,但是当您通过命令行运行它时,解释器对包一无所知,因此相对导入将不起作用。

为了消除"未解决的参考"的红线错误,参见Pycharm中的"未解决的参考问题",它逐步有了完美的说明。