__初始化文件不';在python中无法按预期工作
我有一些文件夹和__初始化文件不';在python中无法按预期工作,python,init,Python,Init,我有一些文件夹和.py文件,其结构如下: parent/ __init__.py test.ipynb code/ __init__.py common.py subcode/ __init__.py get_data.py 在parent文件夹下的\uuuuu init\uuuu文件中,我有impor
.py
文件,其结构如下:
parent/
__init__.py
test.ipynb
code/
__init__.py
common.py
subcode/
__init__.py
get_data.py
在parent
文件夹下的\uuuuu init\uuuu
文件中,我有import code
,在code
之一中,我有import subcode
。但是当我尝试导入code.subcode时,我遇到了这样一个错误:
ImportError: No module named 'code.subcode'; 'code' is not a package
但是,当我只导入代码时,不会抛出任何错误。但是,当我调用code.subcode
时,会发生以下错误:
AttributeError: module 'code' has no attribute 'subcode'
我在test.ipynb
中尝试了上面提到的所有内容,它位于目录的根目录下
你知道原因是什么吗?我该如何解决?谢谢 问题是您正在导入另一个名为
code
的模块,该模块安装在您的系统上,而不是您自己的模块上。您可以通过在导入代码后检查代码中的模块文件路径来验证这一点
首先要做的是更改模块的名称,以避免与系统上的另一个code
包发生命名空间冲突。如果您的新包名没有与其他名称冲突,那么您现在应该要么成功导入它并使其按预期的方式运行,要么完全导入失败
如果导入失败,很可能是因为parent
目录不在PYTHONPATH
环境变量中
解释器无法识别模块可能还有其他更为技术性的原因,例如缓存了旧定义(在这种情况下,重启解释器通常就足够了。可能是在删除模块的任何预编译版本之后)。我看到的另一个问题是,模块中包含一个bug,使得解释器无法解析它。我确信还有其他奇怪的可能性。您使用的是Python 3。您需要显式执行相对导入:
from . import code
您当前获得的code
模块是标准的库模块。试着将您的\uuu init\uuuuuuuuupy
文件保留为空。@DrK同样的事情发生了…….在导入code
之后,code.\uuuuuuu文件\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>指向您期望的目录?@Dr.k哦,真的不。。。。。。。它指向'/home/lcc/anaconda3/envs/parent/lib/python3.5/code.py'
。为什么会发生这种情况……我猜您的PYTHONPATH
环境变量不包含您的parent
目录,如果包含,那么它在列表中的位置将低于您实际导入的code
模块的路径。解决方案:将parent
添加到PYTHONPATH
中,并可能使用与code
不同的名称以避免名称空间冲突。但是在搜索PYTHONPATH
之前,不应该在当前目录(parent/)中找到code
?请参阅:parent
是一个包,因此parent
目录本身可能不应该位于PYTHONPATH
上;包含parent
目录的目录应该在那里。@user2357112是的,我也这么想,但从他导入的方式来看,似乎更像是他要将code
作为包。但你是对的。@孙庆尧你是对的。他可能也在错误的目录中。我对你的评论投了赞成票。