今天我在玩Python并尝试创建自己的模块。我似乎不完全理解Python名称空间,我想知道是否有人能回答我关于它们的问题。你知道吗
下面是我所做的一个例子:
我创建了一个名为mytest的模块,其结构如下:
mytest/
....setup.py
....bin/
....docs/
....mytest/
........__init__.py
........test.py
....tests/
你知道吗测试.py包含一个方法,如下所示:
def say_hello():
print "Hello"
我已经通过distutils安装了mytest。使用'pip list'我可以看到模块已安装。你知道吗
到目前为止还可以,但现在我想用它。我创建了一个测试脚本模块测试.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.test测试(导入mytest.test测试)? 你知道吗
我想我的理解有点不对劲,但一些解释会很有帮助。 谢谢!你知道吗
当您这样做时:
它将
mytest.test
添加到全局命名空间,而不是test
。所以你可以做的是:如果您只想使用
import mytest
行,那么您需要做的是编辑__init__.py
目录中的mytest
文件来表示:然后你可以这样做:
from..import表示法之所以有效,是因为您是从一个包导入的,这并不意味着模块在该包的“名称空间”中,而是意味着它们在包中。你知道吗
在我的测试中尝试这样做
然后再做
它将工作,因为“test”将被导入包命名空间。你知道吗
相关问题 更多 >
编程相关推荐