我有一个名为spellnum的模块.它可以用作命令行实用程序(具有if __name__ ==’__main__’:块),也可以像标准Python模块一样导入.
该模块定义了一个名为Speller的类,如下所示:
class Speller(object):
def __init__(self, lang="en"):
module = __import__("spelling_" + lang)
# use module's contents...
如您所见,类构造函数在运行时加载其他模块.这些模块(spelling_en.py,spelling_es.py等)与spellnum.py本身位于同一目录中.
除了spellnum.py,还有其他带有实用程序功能和类的文件.我想隐藏这些文件,因为我不想将它们公开给用户,并且用随机文件污染Python的lib目录是一个坏主意.我知道实现此目标的唯一方法是创建一个程序包.
我为该项目提出了此布局(受此伟大的tutorial启发):
spellnum/ # project root
spellnum/ # package root
__init__.py
spellnum.py
spelling_en.py
spelling_es.py
squash.py
# ... some other private files
test/
test_spellnum.py
example.py
文件__init__.py包含一行:
from spellnum import Speller
在这种新布局下,必须更改用于动态模块加载的代码ÿ