我今天正在使用 Python 并尝试创建我自己的模块。看来我并不完全理解 Python 命名空间,我想知道是否有人可以回答我关于它们的问题。
这是我所做的一个示例:
我创建了一个名为 mytest 的模块,其结构如下:
mytest/
....setup.py
....bin/
....docs/
....mytest/
........__init__.py
........test.py
....tests/
test.py 包含一个方法如下:
def say_hello():
print "Hello"
我已经通过 distutils 安装了 mytest。使用“pip list”我可以看到模块已安装。
到目前为止一切正常,但现在我想使用它。我创建了一个测试脚本 moduletest.py:
from mytest import test
test.say_hello()
并且运行正常,打印“Hello”消息。我对此很满意,并开始尝试其他导入模块的方法。
以下内容似乎都可以正常工作:
from mytest.test import say_hello
say_hello()
还有:
import mytest.test as test
test.say_hello()
但是,以下内容将不起作用:
import mytest
test.say_hello()
还有:
import mytest
mytest.test.say_hello()
还有:
import mytest.test
test.say_hello()
任何人都可以解释为什么你不能导入整个 mytest 模块,然后使用你想要的部分,或者为什么你必须别名测试(导入 mytest.test 作为测试)才能访问它而不是仅仅导入 mytest。测试(导入 mytest.test)?
我想我的理解有点偏差,但一些解释确实会有帮助。 谢谢!
最佳答案
当你这样做时:
import mytest.test
它将 mytest.test
添加到全局命名空间,而不是 test
。所以你可以做的是:
import mytest.test
mytest.test.say_hello()
如果您只想使用 import mytest
行,则需要编辑 mytest
目录中的 __init__.py
文件说:
import mytest.test
然后你可以这样做:
import mytest
mytest.test.say_hello()
关于python - 有关 Python 命名空间和使用 import 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19480540/