导入子包后,如何无需单独导入即可访问父包命名空间?
关于Python导入操作与命名空间的疑问
有一篇文章对导入操作如何影响命名空间给出了出色的说明,但我发现以下观点并不完全正确:
import packagename.nestedmodule会设置packagename = sys.modules['packagename'](无论嵌套层级多少)
我在Spyder控制台中执行了以下代码:
import pyspark.sql as sql, sys
其中pyspark是一个包,sql是其子包(二者同时也是模块)。
上述操作并未在REPL的命名空间中创建pyspark对象,但在sys.modules中同时生成了sys.modules["pyspark"]和sys.modules["pyspark.sql"]条目。
**有没有办法无需单独导入,就能访问对应sys.modules["pyspark"]的父包命名空间?**虽然我不能完全确定,但sys.modules["pyspark"]条目表明pyspark/__init__.py中的代码已执行,那么其中的对象应该已存在于Python维护的某个作用域中。
本问题与我此前的问题不同,但本问题的答案可能会为旧问题提供思路。
补充说明: mr_mo提供了实现该操作的机制说明,若需要快速代码示例,可通过pyspark=sys.modules["pyspark"]将pyspark命名空间引入当前命名空间,使用dir(pyspark)可确认其中对象的可访问性。
内容的提问来源于stack exchange,提问作者user2153235
相关产品推荐
相关产品推荐

