快速包导入如何工作?

时间:2014-02-07 15:56:09

标签: python python-2.7 import package

hurry软件包集合提供了几个模块,如hurry.filesizehurry.workflow,每个模块都可以单独安装。 hurry模块的导入如何工作?我正在使用Python 2.7

site-packages / 中的目录结构是

site-packages/
    hurry/
        filesize/
            __init__.py
            filesize.py
            tests.py
            README.txt
    hurry.filesize-0.9-py2.7-nspkg.pth
    hurry.filesize-0.9-py2.7.egg-info/
        dependency_links.txt
        ...

hurry / 文件夹中没有__init__.py,但我可以将其导入,并将其视为内置模块。

>>> import hurry
>>> hurry
<module 'hurry' (built-in)>

这是如何工作的?如果没有hurry文件,为什么我可以导入__init__.py?如何为自己的软件包实现此功能?

1 个答案:

答案 0 :(得分:0)

得到了魔力。这是__init__.py包的hurry文件:

# this is a namespace package
try:
    import pkg_resources
    pkg_resources.declare_namespace(__name__)
except ImportError:
    import pkgutil
    __path__ = pkgutil.extend_path(__path__, __name__)

同样重要的是:setup.py

setup(
    ...,
    packages=['foo.bar.ham'],
    namespace_packages=['foo', 'foo.bar'], # <<<
    ...
)