Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调试Python导入失败_Python_Import_Python Import - Fatal编程技术网

如何调试Python导入失败

如何调试Python导入失败,python,import,python-import,Python,Import,Python Import,我有一个目录结构: network/__init__.py network/model.py network/transformer/__init__.py network/transformer/t_model.py 两个\uuuu init\uuuu.py文件都具有适当的 __all__ = [ "model", # or "t_model" in the case of transformer "view", ] 在t_model.py中,我有 from ..

我有一个目录结构:

network/__init__.py
network/model.py
network/transformer/__init__.py
network/transformer/t_model.py
两个
\uuuu init\uuuu.py
文件都具有适当的

__all__ = [
    "model",  # or "t_model" in the case of transformer
    "view",
    ]
在t_model.py中,我有

from .. import model
但它说:

ImportError: cannot import name model
如果我尝试

from ..model import Node
它说:

ImportError: cannot import name Node
这些都是非常令人困惑的错误


编辑:即使是绝对导入也会失败:

import network as N
print(dir(N), N.__all__)
import network.model as M

['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'transformer'] ['model', 'view']
Traceback (most recent call last):..........
AttributeError: 'module' object has no attribute 'model'

编辑:这是来自的循环导入

我认为您还可以从下面的目录执行network/model.py,并获得到network的相对导入。所以

network/
    model.py
    __init__.py

然后用
$python network/model.py
启动程序。您可能需要也可能不需要点击
\uuuu init\uuuu.py
。我有一个针对
模块/\uuuu init\uuuu.py
的应用程序引擎程序,相对导入效果很好。

这对我来说很有效。能否运行/导入model.py?如果它有语法错误,则无法导入。(一般来说,我建议不要做相对进口,它们的使用是有限的)

你的绝对重要性非常令人困惑。在此包中执行绝对导入的方法是:

from network model import Node
这个很好用

我在顶层(网络上方)有一个program.py:

从network.transformer导入t_模型

t_model.py如下所示:

from .. import model
print "Model", model

from ..model import Node
print "Node", Node

from network.model import Node
print "Absolute", Node
输出为:

Model <module 'network.model' from '/tmp/network/model.pyc'>
Node <class 'network.model.Node'>
Absolute <class 'network.model.Node'>
模型
节点
绝对的

因此,正如您所见,它工作正常。您的错误在其他地方。

哪种版本的Python?您使用哪种Python命令行启动应用程序?没有回答“如何调试Python导入失败?”的问题。。。(虽然具体问题已经解决)谢谢。我在每个文件夹中都有
\uuuuu init\uuuuuu.py
。如果我从network.model导入节点导入,它会显示ImportError:无法导入名称Node@NeilG:当然可以。如上所述,您的相对导入是正确的,错误在其他地方,而不是在如何编写导入中。现在如果你读了我的答案,你会发现我问了你一个问题。如果您需要这方面的帮助,我建议您回答。导入model.py是个问题。结果是model.py导入了t_model.py,而t_model.py导入了model.py。这一次我差点就发疯了。非常感谢您的帮助。另外,我真的更喜欢绝对进口而不是相对进口吗?或者反之亦然?@Neil G:太好了!很乐意帮忙!根据我的经验,你几乎不需要相对导入,绝对导入造成的混乱更少。:-)
Model <module 'network.model' from '/tmp/network/model.pyc'>
Node <class 'network.model.Node'>
Absolute <class 'network.model.Node'>