2015-05-27 66 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(), 
    ... 
)