如何将从Python包导出的所有符号放置在包范围内?

时间:2018-06-29 04:37:30

标签: python packages

几个月前,我偶然在某个Python项目中使用了BeautifulSoup,我注意到该库是以某种独特的方式组织的。

要使用BeautifulSoup类,您只需导入顶级软件包,如下所示:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)

我知道这是因为BeautifulSoup类(基本上是库提供的唯一类)直接放置在__init__.py目录中的bs4中,目的是明确导入库简单。

我想知道在建立自己的库时这种做法是否合适。

显然,通过在__init__.py中编写类主体将类放在包作用域中将无限期地膨胀文件,但是我既不喜欢通常只有一个类(或任何单位的类)的通常的Python方式。代码)。

简而言之,我不喜欢编写这样的冗余导入语句,当在每个模块中放置一个类时,这似乎是不可避免的:

from mylibrary.splendidparser import splendidparser
from mylibrary.supremetimer import supremetimer
from mylibrary.superbrenderer import superbrenderer

相反,我更喜欢BeautifulSoup方式:

from mylibrary import splendidparser
from mylibrary import supremetimer
from mylibrary import superbrenderer

有什么方法可以打包我的库以启用这种导入样式而不会夸大__init__.py

1 个答案:

答案 0 :(得分:3)

您不必将实现放在__init__.py中。您可以将定义放入包目录中的其他模块中,然后将其导入__init__.py中,然后从那里开始使用它们。

是的,这是适当的。尝试import this,您将看到社区努力遵循的Python Zen,包括“扁平比嵌套更好”。