2015-05-27 94 views
7

包目錄結構是這樣的setuptools的蟒蛇的setup.py安裝不復制所有子模塊

repodir/ 
-------- setup.py 
-------- MANIFEST.in 

-------- bin/ 
----------- awsm.sh 

-------- sound/ 
------------ init.py 

------------ echo/ 
----------------- init.py 
----------------- module1.py 
----------------- module2.py 

------------ effects/ 
------------------- init.py 
------------------- module3.py 
------------------- module4.py 

setup.py

from setuptools import setup 
setup(
     name = 'sound', 
     version = '0.1', 
     author = 'awesomeo', 
     author_email = '[email protected]', 
     description = 'awesomeo', 
     license = 'Proprietary', 
     packages = ['sound'], 
     scripts = ['bin/awsm.sh'], 
     install_requires = ['Django==1.8.2', 'billiard', 'kombu', 'celery', 'django-celery' ], 
     zip_safe = False, 
    ) 

當我做的 - 蟒蛇的setup.py安裝,只有聲音/ init .py被複制到/Library/Python/2.7/site-packages/sound/目錄。

其餘的子包回聲,環繞和效果根本不會被複制。 setuptools的創建sound.egg-信息包含SOURCES.txt文件

SOURCES.txt

MANIFEST.in 
setup.py 
bin/awsm.sh 
sound/__init__.py 
sound.egg-info/PKG-INFO 
sound.egg-info/SOURCES.txt 
sound.egg-info/dependency_links.txt 
sound.egg-info/not-zip-safe 
sound.egg-info/requires.txt 
sound.egg-info/top_level.txt 

看起來安裝不包括在SOURCES.txt文件中的子包被複制的安裝,這就是造成問題的原因。

任何想法爲什麼會發生這種情況?

回答

3

sound.echosound.effects增加到packagesdistutils不會遞歸地收集子包。

由於每fine documentation

的Distutils不會遞歸式掃描您的源代碼樹中尋找任何目錄與__init__.py文件

注:此外,一定要創造__init__.py文件的包(在你的問題中,你將它們命名爲init.py)。

+0

爲我工作,謝謝!之前不知道遞歸掃描。 – Manas

+0

如果有幫助,你可以「接受」答案.-) – knitti

9

您已經在使用的setuptools因此你可以導入find_packages得到所有子包:

from setuptools import setup, find_packages 
setup(
    ... 
    packages=find_packages(), 
    ... 
)