我的项目有以下结构:
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我应该如何从tb重写a的导入,以便tb可以直接运行而不会导致错误?
发布于 2017-09-20 17:09:49
要么你可以用
import a或亲属
from .a import *在这种情况下,应该加载模块**a**。
python -m a tb.py威尔对你有用。
不鼓励导入*,请按需要导入
如果您的DSTC中有一个main.py,如下所示:
# main.py
from st import tb而且您只运行main.py,只有相对的方法才对您有效。
# tb.py
import a # will not work
from .a import * # will work因为这一次你把'a‘作为一个模块加载。
发布于 2017-09-20 16:35:16
您只需要导入模块a。
import a发布于 2017-09-20 17:24:24
使用import .a,或者更好地使用import st.a。只有当您将tb作为包的一部分导入(例如,使用来自父目录的python -m开关)而不是像脚本一样运行它时,这些方法才能工作。
正如其他人所说的,简单地说,import a将起作用。无论st是作为模块运行还是作为脚本运行,这都有利于工作,但这是一种糟糕的实践,只在python 2上工作,而不是python 3。
其他人提到的from变体也是如此。
https://stackoverflow.com/questions/46327361
复制相似问题