我的项目具有以下结构:
DSTC/
st/
__init__.py
a.py
g.py
tb.py
dstc.py
以下是a.py
部分:
import inspect
import queue
import threading
以下是tb.py
部分:
import functools
from . import a
直接运行时,a.py
不会产生错误,并且很容易验证没有SyntaxError
。但是,运行tb.py
会导致以下错误:
"C:\Program Files\Python36\python.exe" C:/Users/user/PycharmProjects/DSTC/st/tb.py
Traceback (most recent call last):
File "C:/Users/user/PycharmProjects/DSTC/st/tb.py", line 15, in <module>
from . import a
ImportError: cannot import name 'a'
Process finished with exit code 1
如何从a
重写tb
的导入,以便tb
可以直接运行而不会导致错误?
答案 0 :(得分:0)
你可以使用
import a
或亲戚
from .a import *
并且在这种情况下应该加载模块**a**
python -m a tb.py
适合你。
不建议使用import *,只需按需导入
如果你的DSTC中有一个main.py,如下所示:
# main.py
from st import tb
你运行main.py只有相对的方法对你有用
# tb.py
import a # will not work
from .a import * # will work
因为这次加载'a'作为模块。
答案 1 :(得分:-1)
您只需要导入模块a
。
import a
答案 2 :(得分:-1)
使用import .a
或更好的import st.a
。这些仅在您将tb
作为程序包的一部分导入时才有效(例如,使用父目录中的python -m
切换),而不是像脚本一样运行它。
正如其他人所说,只需import a
即可。无论st
是作为模块还是脚本运行,这都有利于工作,但这是不好的做法,只适用于python 2,而不是python 3。
这同样适用于其他人提到的from
变体。