2014-02-07 63 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是的,就是這樣。 –