也许这是不可能的(我更习惯Ruby,这种事情很好)。我正在编写一个为docker-py提供附加功能的库,它提供docker
包,所以你只需import docker
然后就可以访问docker.Client
等。
因为它似乎是一个逻辑命名方案,所以我希望用户使用import docker.mymodule
引入我的项目,因此我创建了一个名为docker
的目录,其__init__.py
和{{在它里面。}
当我尝试访问mymodule.py
时,Python无法看到它,就好像我的docker.Client
包隐藏了它一样:
docker
这是可能的,还是源树之间的所有顶级包名都必须不同?
答案 0 :(得分:2)
仅当docker
设置为namespace package(it isn't)时,才可以执行此操作。
请参阅zope.schema
,zope.interface
等,以获取命名空间包的示例(zope
是此处的命名空间包)。因为zope
在setup.py
中被声明为命名空间包,所以它意味着zope
没有引用文件系统上的特定模块或目录,但是它是一个共享的命名空间。几个包。这也意味着import zope
的结果几乎未定义 - 它只会导入导入路径中找到的第一个zope.*
包的顶级模块。
因此,在处理命名空间包时,您需要使用import zope.schema
或from zope import schema
明确导入特定的包。
不幸的是,名称空间包并没有很好地记录。正如评论中@Bakuriu
所述,这些资源包含一些有用的信息: