如何从不同的子模块导入一个子模块?
How to import one submodule from different submodule?
我的项目结构如下:
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
。但是,运行ning 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
可以直接运行而不会导致错误?
您只需要导入模块 a
。
import a
你可以使用
import a
或亲戚
from .a import *
在这种情况下,应该加载模块 **a**
python -m a tb.py
适合你。
import * is discouraged, import just as you need
如果您的 DSTC 中有 main.py,如下所示:
# main.py
from st import tb
你 运行 main.py 只有相对的方法才适合你
# tb.py
import a # will not work
from .a import * # will work
因为这次您将 'a' 作为模块加载。
使用 import .a
或者更好的是 import st.a
。只有当您将 tb
作为包的一部分导入(例如使用 python -m
从父目录切换)而不是像脚本一样 运行 时,这些才会起作用。
正如其他人所说,只需 import a
即可。无论 st
是 运行 作为模块还是脚本,这都具有工作优势,但这是不好的做法,只适用于 python 2,而不适用于 python 3.
这同样适用于其他人提到的 from
变体。
我的项目结构如下:
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
。但是,运行ning 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
可以直接运行而不会导致错误?
您只需要导入模块 a
。
import a
你可以使用
import a
或亲戚
from .a import *
在这种情况下,应该加载模块 **a**
python -m a tb.py
适合你。
import * is discouraged, import just as you need
如果您的 DSTC 中有 main.py,如下所示:
# main.py
from st import tb
你 运行 main.py 只有相对的方法才适合你
# tb.py
import a # will not work
from .a import * # will work
因为这次您将 'a' 作为模块加载。
使用 import .a
或者更好的是 import st.a
。只有当您将 tb
作为包的一部分导入(例如使用 python -m
从父目录切换)而不是像脚本一样 运行 时,这些才会起作用。
正如其他人所说,只需 import a
即可。无论 st
是 运行 作为模块还是脚本,这都具有工作优势,但这是不好的做法,只适用于 python 2,而不适用于 python 3.
这同样适用于其他人提到的 from
变体。