我在以下结构中有一些文件夹和.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
中尝试了上面提到的所有内容,这是目录的根目录。
您知道原因是什么,我该如何解决?谢谢!
答案 0 :(得分:4)
问题是您要导入系统上安装的另一个名为code
的模块,而不是您自己的模块。您可以在code.__file__
之后检查import code
中的模块文件路径来验证这一点。
要做的第一件事是更改模块的名称,以避免与系统上的其他code
包发生命名空间冲突。如果您的新软件包名称没有与其他内容发生冲突,您现在应该成功导入它并使其按预期运行,或者无法完全导入。
如果无法导入,很可能是因为您的parent
目录不在PYTHONPATH
环境变量中。
可能还有其他更多技术原因导致解释器无法识别模块,例如缓存旧定义(在这种情况下,重新启动解释器通常就足够了。可能在删除模块的任何预编译版本之后)。我看到的另一个问题最终是一个模块包含一个错误,使得解释器无法解析它。我相信还有其他奇怪的可能性。
答案 1 :(得分:2)