python ImportError无法导入父模块

时间:2018-01-11 16:39:36

标签: python-3.x python-import

我试图理解Python的导入结构并创建了以下内容:

+-- prj
|    +-- __init__.py
|    +-- /moda
|    |   +-- __init__.py
|    |   +-- fa.py
|    +-- /prja
|    |   +-- __init__.py
|    |   +-- prjf.py
|    +-- /web
|    |   +-- __init__.py
|    |   +-- page.py
|

fa.py

from prj.web import page    
print("fa")

prjf.py

from prj.moda import fa   
from .moda import fa
print(dir(prj))
print('prj')

page.py

print("page")

然而,跑步:

 $pwd
/home/user/test/prj
 $ python prja/prjf.py

我得到了

Traceback (most recent call last):
  File "prja/prjf.py", line 1, in <module>
    from prj.moda import fa
  File "/home/user/test/prj/prja/prj.py", line 1, in <module>
ImportError: cannot import name prj

但是自官方python以来,这没有任何意义 docs明确说明

  

当包被组织成子包时(与示例中的声音包一样),您可以使用绝对导入来引用兄弟包的子模块。例如,如果模块sound.filters.vocoder需要在sound.effects包中使用echo模块,它可以使用sound.effects import echo。

另外如果在prjf中我先把相对导入我得到

Traceback (most recent call last):
File "prja/prjf.py", line 1, in <module>
from .moda import fa
ValueError: Attempted relative import in non-package

虽然预期结果不是这样的包moda

它是默认的ubuntu上的默认python3安装

0 个答案:

没有答案