2015-05-17 44 views
3

我有一個python3腳本script.py,並且在其中我想實例化一個在clazz.py中定義的類Foobar。然而,當我嘗試導入,我得到:Intellij的想法將無法識別python中的本地類的導入3

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

這裏是我的文件結構:

python_import/ 
├── __init__.py 
├── clazz.py 
└── script.py 

clazz.py:

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

script.py:

from .clazz import Foobar 
foobar = Foobar() 

它運行良好,如果我擺脫.import;然而,如果我這樣做,我的IDE(Intellij IDEA)紅色突出顯示導入,並且不會自動完成任何操作。我相信包括.在python3中是正確的,Intellij似乎喜歡它,那麼爲什麼我的程序不會運行,除非我刪除它?

我已閱讀http://www.diveintopython3.net/porting-code-to-python-3-with-2to3.html#import, http://python.readthedocs.org/en/latest/reference/import.html, How to import the class within the same directory or sub directory?, Relative imports in Python 3Relative import in Python 3 not working

我懷疑它可能與virtualenv有關,但a)我不明白爲什麼工作目錄不會是PYTHONPATH的一部分,b)我不確定如何在virtualenv中更改它 - Intellij爲我設置了它。

回答

3

你的IDE喜歡.的原因是它知道你的腳本是在包python_import/中,但是當你通過命令行運行它時,解釋器不知道軟件包,所以相對導入將不起作用。

爲了消除「未解決的參考」的紅線錯誤,請參閱Unresolved reference issue in PyCharm,它有一步一步完善的說明。