我正在尝试使用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',
)
答案 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-info
和build
目录,以某种方式保留了该模块具有被包括。
答案 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"]),
在单词开头加上星号就可以了。