用Python重新打开一个包

时间:2014-06-22 09:29:26

标签: python

也许这是不可能的(我更习惯Ruby,这种事情很好)。我正在编写一个为docker-py提供附加功能的库,它提供docker包,所以你只需import docker然后就可以访问docker.Client等。

因为它似乎是一个逻辑命名方案,所以我希望用户使用import docker.mymodule引入我的项目,因此我创建了一个名为docker的目录,其__init__.py和{{在它里面。}

当我尝试访问mymodule.py时,Python无法看到它,就好像我的docker.Client包隐藏了它一样:

docker

这是可能的,还是源树之间的所有顶级包名都必须不同?

1 个答案:

答案 0 :(得分:2)

仅当docker设置为namespace packageit isn't)时,才可以执行此操作。

请参阅zope.schemazope.interface等,以获取命名空间包的示例(zope是此处的命名空间包)。因为zopesetup.py中被声明为命名空间包,所以它意味着zope没有引用文件系统上的特定模块或目录,但是它是一个共享的命名空间。几个包。这也意味着import zope的结果几乎未定义 - 它只会导入导入路径中找到的第一个zope.*包的顶级模块。

因此,在处理命名空间包时,您需要使用import zope.schemafrom zope import schema明确导入特定的包。

不幸的是,名称空间包并没有很好地记录。正如评论中@Bakuriu所述,这些资源包含一些有用的信息: