[英]Python import failure
遇到了一些奇怪的导入错误,这是解释器报告的异常错误。
我使用CPython-3.5
目录结构:
.
+-- outer
| +-- inner
| | +-- __init__.py
| | +-- first.py
| | +-- second.py
| +-- __init__.py
+-- main.py
main.py:
import outer.inner
print(outer.inner.var)
外部/__init__.py:为空
外/内/__init__.py:
import outer.inner.first
var = outer.inner.first.var
外部/内部/first.py:
import outer.inner.second
var = outer.inner.second.var
外/内/second.py:
var = 1337
然后,我运行main.py
并且此堆栈跟踪脚本失败:
Traceback (most recent call last):
File "main.py", line 1, in <module>
import outer.inner
File "/outer/inner/__init__.py", line 1, in <module>
import outer.inner.first
File "/outer/inner/first.py", line 2, in <module>
var = outer.inner.second.var
AttributeError: module 'outer' has no attribute 'inner'
因此,Python不想正确地绑定名称。 虽然first.py import语句: import outer.inner.second
是没有崩溃执行,这句话结合来命名outer
像一个空包,没有(但应)命名的模块inner
我做错了什么?
最好导入相对路径,而不是绝对路径。 我不知道您要达到什么目的,但是从同一级别的文件导入内容的正确方法是使用点.
因此,在您的first
文件中使用类似以下内容:
from .second import var as second_var
var = second_var
在inner/__init__.py
文件中,如下所示:
from .first import var as first_var
var = first_var
这样可以避免名称冲突,并使名称保持简单,唯一且通常更易读的代码。
编辑:
另外,如果您不main.py
python,请考虑在main.py
模块中添加解释器注释。 对于类Unix系统(OS X,Linux等)的用户来说非常方便
#!/usr/bin/env python3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.