使用setup.py构建滚轮时是否可以排除某些文件?

时间:2014-11-13 14:22:35

标签: python setuptools

我知道你可以使用以下方法排除某些包裹:

packages = find_packages("src", exclude=["test"]),

是否也可以排除单个python文件? 我正在构建一个二进制轮,并希望排除某些源文件,这些文件我已经#cy; cython化了#34;使用自定义功能:

python cythonize bdist_wheel

目前,在使用自定义脚本构建滚轮之后,我删除了所有也包含.so库文件的python文件,我想用setup.py执行此操作。

3 个答案:

答案 0 :(得分:8)

py-docs "How to include/exclude files to the package"中有一篇含糊不清的(IMO)文章。 用两个词:使用find_packagesMANIFEST.in

的组合

要检查包中的内容(在发送到PyPI之前),运行python setup.py sdist,然后检查./dist文件夹的内容(应该有你的包的tarball)

我的用例

忽略一个文件

MANIFEST.in添加到您的软件包的根目录,并添加以下行:

exclude .travis.yml
exclude appveyor.yml
exclude data/private/file.env

此文件不会包含在分发包中。

在源附近进行测试

如果您的项目测试文件放在代码附近(换句话说,没有分隔的目录tests),如下所示:

package1
├── src
│   ├── __init__.py
│   ├── __init__test.py
│   ├── mymod.py
│   ├── mymod_test.py
│   ├── typeconv.py
│   └── typeconv_test.py
│
├── LICENSE
└── README.rst

您可以将此行添加到MANIFEST.insetuptools将忽略测试文件:

global-exclude *_test.py

另见

答案 1 :(得分:2)

您可以将setuptools.find_packages()修订控制插件一起使用,即setuptools-git

以下是setup.py项目设置中的一些摘录,用于排除tests目录:

from setuptools import setup, find_packages

setup(
    name=...
    ...
    packages=find_packages(exclude=["tests"]),
    setup_requires=[
        'setuptools',
        'setuptools-git',
        'wheel',
    ]

上面使用的其他插件可用于 bzr darcs 单调 mercurial

提示:

在运行:python setup.py bdist_wheel

之前,不要忘记清理构建目录

答案 2 :(得分:1)

如果您使用include_package_data=True,也可以从setup()函数中使用exclude_package_data关键字。

from setuptools import setup

setup(
    name=...,
    ...,
    include_package_data=True,
    exclude_package_data={
        '': 'file_to_exclude_from_any_pkg.c',
        'pkg_name': 'file_to_exclude_from_pkg_name.c',
        ...
    }
)