假设有两个文件a.py
和 b.py
.它们里面有以下内容:
# a.py
from b import foo
foo()
# b.py
import os
def foo():
print(os.cwd())
这工作得很好,但为什么 a.py
无法看到 b.py
的导入隐含地供自己使用:# a.py
import b
def bar():
print(os.cpu_count()) # fails
b.foo()
bar()
# b.py
import os
def foo():
print(os.cwd())
我正在阅读 import system docs,但无法弄清楚这一点。 os
import 存在于 b.py
的命名空间中但它不适用于 a.py
我不确定为什么。 globals()
方法是在模块级别,所以给定 rules ,模块之间是否没有共享导入(不使用 __all__
和 *
导入)?每个模块都有自己的导入命名空间吗?
最佳答案
每个模块都有其命名空间。
import 语句做了两件事:如果一个模块在当前进程中还没有被导入,它就会被加载并执行。之后,它的名称将绑定(bind)到 import 语句所在的本地命名空间。
如果一个模块已经在同一个进程中被导入,它不会被重新加载,但导入语句中的名称被导入语句正确绑定(bind)。
正确的做法是添加另一个import os
在您的 a
上模块 -
但如果你这样做 import b
您可以使用 b.os.cwd()
(因为“os”是模块b
执行后的绑定(bind)名称)
关于python - 为什么 Python 看不到以前导入的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66281112/