从setuptools包中排除顶级目录

时间:2009-03-04 00:50:24

标签: python setuptools

我正在尝试使用setuptools将Python项目放入tarball中。问题是setuptools似乎不喜欢源树最初设置的方式(不是我,我必须添加)。我实际想要分发的所有东西都在顶级目录中,而不是像setuptools docs那样的子目录。

树有一个目录tests,我不想在已发布的包中拥有该目录。但是,使用exclude_package_data似乎并没有实际排除,我想弄清楚我做错了什么。

我的setup.py在相关部分中看起来像这样:

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

7 个答案:

答案 0 :(得分:15)

我们使用以下约定从包中排除'tests'。

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

我们还使用MANIFEST.in来更好地控制include_package_data=True的作用。

答案 1 :(得分:14)

我在同一个问题上浪费了几个小时,试图排除一个模块,最后我发现我不得不删除*.egg-infobuild目录,以某种方式保留了该模块具有被包括。

答案 2 :(得分:8)

我的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

要排除我的doc目录,我唯一需要做的就是MANIFEST.in底部的这一行......

prune doc*

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

prune tests*

答案 3 :(得分:8)

这是我在setuptools manual中找到的:

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

在我的情况下,以下内容足以排除顶级测试目录:

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

答案 4 :(得分:4)

Ug,setuptools让这真的很棘手:(

我不知道这是否是你想要的,但我工作的一个项目使用了两件事:

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

答案 5 :(得分:1)

出于类似目的,我的同事写了setuptools-dummy软件包:http://github.com/ella/setuptools-dummy/tree/master

看看setuptools dummy,修改排除你的需求,它应该工作。如果没有,请打开一个问题;)

答案 6 :(得分:0)

适用于我的情况的其他解决方案。 显然: packages = setuptools.find_packages(exclude = [“ tests。*”,“ tests”]),

不起作用,但是:

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

在单词开头加上星号就可以了。