__init__文件在python中没有按预期工作

时间:2016-07-29 02:11:24

标签: python init

我在以下结构中有一些文件夹和.py文件:

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

__init__文件夹下的parent文件中,我有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中尝试了上面提到的所有内容,这是目录的根目录。

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

2 个答案:

答案 0 :(得分:4)

问题是您要导入系统上安装的另一个名为code的模块,而不是您自己的模块。您可以在code.__file__之后检查import code中的模块文件路径来验证这一点。

要做的第一件事是更改模块的名称,以避免与系统上的其他code包发生命名空间冲突。如果您的新软件包名称没有与其他内容发生冲突,您现在应该成功导入它并使其按预期运行,或者无法完全导入。

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

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

答案 1 :(得分:2)

您使用的是Python 3.您需要明确执行相对导入:

from . import code

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