__init__ 文件在 python 中无法按预期工作

use*_*223 4 python init

我有一些具有.py以下结构的文件夹和文件:

parent/
       __init__.py
       test.ipynb
       code/
            __init__.py
            common.py
            subcode/
                    __init__.py
                    get_data.py
Run Code Online (Sandbox Code Playgroud)

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

ImportError: No module named 'code.subcode'; 'code' is not a package
Run Code Online (Sandbox Code Playgroud)

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

AttributeError: module 'code' has no attribute 'subcode' 
Run Code Online (Sandbox Code Playgroud)

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

您知道原因是什么以及如何解决吗?谢谢!

Dr *_*r K 5

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

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

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

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