Python 3.x 如何在python中正确导入子包?

Python 3.x 如何在python中正确导入子包?,python-3.x,python-import,Python 3.x,Python Import,我有一个导入错误,我不明白。我在下面做了一个简单的示例,一个名为p\u parent的小名称空间包,它不包含\uuuu init\uuuuuuuuupy文件,但包含另一个名为c\u child 这里是完整的树木园: p_parent ├── c_child │   ├── c_main.py │   └── __init__.py └── p_main.py c_main.py和p_main.py几乎不包含任何内容p_parent/c_child/_init__.py仅包含导入 以下是重建此脚

我有一个
导入
错误,我不明白。我在下面做了一个简单的示例,一个名为
p\u parent
的小名称空间包,它不包含
\uuuu init\uuuuuuuuupy
文件,但包含另一个名为
c\u child

这里是完整的树木园:

p_parent
├── c_child
│   ├── c_main.py
│   └── __init__.py
└── p_main.py
c_main.py
p_main.py
几乎不包含任何内容
p_parent/c_child/_init__.py
仅包含导入

以下是重建此脚本的shell脚本:

mkdir p_parent
mkdir p_parent/c_child
echo '#!/usr/bin/env python3\n\nc_value = 4\n' > p_parent/c_child/c_main.py
echo '#!/usr/bin/env python3\n\np_value = 4\n' > p_parent/p_main.py
echo '#!/usr/bin/env python3\n\nimport p_parent.c_child.c_main as c\n' > p_parent/c_child/__init__.py
\uuuu init\uuuuu.py
文件的内容是
将p\u parent.c\u child.c\u main导入为c
时,我在尝试导入子模块时遇到了一个我不理解的错误:

>>> import p_parent.c_child
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/C/autools/release/2019.09/scade/package/p_parent/c_child/__init__.py", line 3, in <module>
    import p_parent.c_child.c_main as c
AttributeError: module 'p_parent' has no attribute 'c_child'
使用p_parent.c_child.c_main*的
,它会以某种方式工作,但我更愿意避免它:

>>> import p_parent.c_child
>>> p_parent.c_child.c_value
4
这里的逻辑是什么?为什么错误如此不直观


使用的是Python 3.6

能否提供Python版本?我认为在3.6或3.7中,
\uuuu init\uuuu.py
的用法随着子包的改变而改变。您能提供您的Python版本吗?我认为在3.6或3.7中,
\uuuuu init\uuuuu.py
的用法随着子包的变化而改变。
>>> import p_parent.c_child
>>> p_parent.c_child.c_value
4