2014-02-07 39 views
0

hurry软件包集合提供了几个模块,如hurry.filesizehurry.workflow,它们可以分别安装。如何导入hurry模块?我使用Python 2.7快速包导入如何工作?

站点包目录结构/

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 
     ... 

有一个在匆忙/文件夹中没有__init__.py,但我可以导入它,它被视为内置模块。

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

这是如何工作的?为什么我可以在没有__init__.py文件的情况下导入hurry?我如何为自己的包实现这个功能?

回答

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'], # <<< 
    ... 
) 
+0

因此,关键是,它hurry.filesize'安装'作为一个包和'hurry'作为命名空间包?你在这里使用'foo'和'bar',这有点令人困惑。 – florisla

+0

@florisla是的,就是这样。 –