__init__ 文件在 python 中无法正常工作

__init__ file doesn't work as expected in python

我有一些文件夹和 .py 文件,结构如下:

parent/
       __init__.py
       test.ipynb
       code/
            __init__.py
            common.py
            subcode/
                    __init__.py
                    get_data.py

parent 文件夹下的 __init__ 文件中,我有 import code,在 code 中,我有 import subcode。但是当我尝试import code.subcode时,我得到了这样一个错误:

ImportError: No module named 'code.subcode'; 'code' is not a package

但是当我只是 import code 时,没有抛出任何错误。但是,当我调用 code.subcode 时,会发生此错误:

AttributeError: module 'code' has no attribute 'subcode' 

我在目录的根目录 test.ipynb 中尝试了上面提到的所有内容。

你知道是什么原因吗?我该如何解决?谢谢!

问题是您正在导入另一个名为 code 的模块,该模块安装在您的系统上,而不是您自己的模块。您可以通过在 import code.

之后检查 code.__file__ 中的模块文件路径来验证这一点

首先要做的是更改模块的名称,以避免与系统上的其他 code 包发生命名空间冲突。如果您的新包名称没有与其他名称冲突,您现在应该要么成功导入它并使其按预期运行,要么完全导入失败。

如果导入失败,很可能是因为您的parent目录不在您的PYTHONPATH环境变量中。

可能还有其他更多技术原因导致解释器无法识别模块,例如缓存旧定义(在这种情况下,重新启动解释器通常就足够了。可能在删除模块的任何预编译版本之后) .我看到的另一个问题是模块包含一个错误,导致解释器无法解析它。我相信还有其他奇怪的可能性。

您在 Python 3. 您需要显式执行相对导入:

from . import code

您当前获得的 code 模块是标准库 code 模块。