2014-11-20 41 views
4

使用Python 3.4和setuptools的,我試圖讓命名空間的包正常運行安裝在PEP定義420.我的目錄結構看起來是這樣的:蟒蛇隱含命名的包不與setuptools的

  • 項目
    • __init__.py
    • 核心
      • 幾個.py文件
    • 記錄
      • COM1
        • 幾個.py文件
      • COM2
        • 幾個.py文件
    • 接口
      • 其它文件

當使用setuptools的find_package()函數,它會找到「project」包,但它不會在「project」中安裝任何文件夾(隱式子包)。當我解壓縮.egg文件時,我所看到的只是裏面的__init__.py文件,沒有任何子目錄或文件。

我可以在每個目錄中放一個__init__.py,但由於這些文件都是空的,我不喜歡它使結構工作的方式,所以我試圖避免這種情況。

如果我搬到外面我的「工程」目錄,並運行以下,它的工作原理

python -m project.logging.com1.myfile

,但其他地方也行不通,因爲setuptools的是不是安裝子目錄(隱式命名空間),其中沒有__init__.py。

如何讓setuptools正確安裝隱式名稱空間包?我只需要告訴它在目錄中安裝所有文件,那就足夠好了嗎?

回答

3

看來向setuptools添加了PEP 420支持的最初的請求是rejected。關於在another issue上合併PEP 420支持的最佳方法有一個公開的討論,但目前似乎並未支持隱式名稱空間。

0

隱式命名空間包不受find_packages支持。但是,find_packages所做的只是返回一個列表dotted.package.name s。您仍然可以顯式列出您的軟件包。