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

tyt*_*ytk 4 python import intellij-idea python-3.x

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

$ python3 script.py
...
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

这是我的文件结构:

python_import/
??? __init__.py
??? clazz.py
??? script.py
Run Code Online (Sandbox Code Playgroud)

clazz.py:

class Foobar():
    def __init__(self):
        print("initialized a foobar")
Run Code Online (Sandbox Code Playgroud)

script.py:

from .clazz import Foobar
foobar = Foobar()
Run Code Online (Sandbox Code Playgroud)

它运行很好,如果我摆脱.import; 但是,如果执行此操作,则我的IDE(Intellij IDEA)会以红色下划线标记导入内容,并且不会自动完成任何操作。我相信.在python3中包含正确,并且Intellij似乎很喜欢,所以除非删除它,否则为什么我的程序无法运行?

我已阅读http://www.diveintopython3.net/porting-code-to-python-3-with-2to3.html#importhttp://python.readthedocs.org/en/latest/reference/import.html如何在同一目录或子目录中导入类?Python 3中的相对导入Python 3中的相对导入不起作用

我怀疑它可能与virtualenv有关,但是a)我不明白为什么工作目录不会成为PYTHONPATH的一部分,并且b)我不太确定如何在virtualenv中进行更改-Intellij设置了它为我。

lai*_*e9m 5

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

要消除“未解析参考”的红线错误,请参阅PyCharm中的“未解析参考” 问题,它具有逐步完善的插图。