2009-03-04 112 views
11

我正在尝试使用setuptools将Python项目放入tarball。问题是setuptools似乎不喜欢源树最初设置的方式(不是我自己,我必须添加)。我实际想要分发的所有内容都位于顶层目录中,而不是像setuptools文档所讨论的子目录中。从setuptools包中排除顶级目录

该树有一个目录,tests,我不想在发布的软件包中有。但是,使用exclude_package_data似乎实际上没有排除任何内容,我想解决我做错了什么。

setup.py看起来像这样,在相关部分:

setup(
    name="project", 
    packages=[''], 
    include_package_data=True, 
    exclude_package_data={'': ['tests']}, 
    test_suite='nose.collector', 
) 

回答

4

UG,setuptools的使这个真正棘手:(

我不知道这是不是你想要的,但一个项目,我工作用的两件事情的组合:

from setuptools import setup, find_packages 
... 
packages = find_packages(exclude=['tests']), 
data_files = os.walk(path_to_files), 
9

我们使用以下约定从软件包中排除“测试”。

setup(
    name="project", 
    packages=find_packages(exclude=("tests",)), 
    include_package_data=True, 
    test_suite='nose.collector', 
) 

我们还使用MANIFEST.in更好地控制'include_package_data = True'的含义。

问候,马丁。

+1

奇怪的是,使用`exclude =()`对我来说还不够。根据http://stackoverflow.com/a/11669299/472876,我不得不在``MANIFEST'中使用递归 - 排除测试*`。在`为成功。 – HeyWatchThis 2014-08-12 16:28:33

2

我在setup.py以下...

setup(name='pyfoo', 
     version="1.0.2", 
     description='Example for stack overflow', 
     url='http://stackoverflow.com/', 
     author='David Michael Pennington', 
     author_email='mike /|at|\ pennington.net', 
     license='GPL', 
     platforms='any', 
     keywords='Stack Overflow Example', 
     entry_points = "", 
     long_description=read('README.rst'), 
     include_package_data=True, # Checks MANIFEST.in for explicit rules 
     #     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
     packages=find_packages(), 
     use_2to3=True, 
     zip_safe=False, 
     setup_requires=["setuptools_hg"], 

我有一个doc/目录是由于图像我在它的数量越来越庞大;这意味着我的sdist的大小增长超过500kB。本来我在MANIFEST.in有这个...

include LICENSE CHANGES README.rst requirements.txt 
recursive-exclude * __pycache__ 
recursive-exclude * *.pyc 
recursive-exclude * *.pyo 
recursive-exclude * *.orig 

我不得不这样做,以排除我的文档目录是这条线在MANIFEST.in底部的唯一的事情...

prune doc* 

使用prune doc*突然从sdist tarball中删除了我所有的doc/目录。因此,它看起来像你只需要在MANIFEST.in文件中使用此...

prune tests* 
5

这是我在setuptools manual发现:

from setuptools import setup, find_packages 
... 
packages = find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]), 

在我的情况下,下面就足以排除顶部级别测试目录:

packages = find_packages(exclude=["tests.*", "tests"]),