繁体   English   中英

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

[英]Is it possible to exclude certain files when building a wheel with setup.py?

我知道您可以使用以下方法排除某些软件包:

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

是否也可以排除单个 python 文件? 我正在构建一个二进制轮,并希望排除某些我使用自定义函数“cythonized”的源文件:

python cythonize bdist_wheel

目前,我在使用自定义脚本构建轮子后删除了所有也有 .so 库文件的 python 文件,我想用 setup.py 来做到这一点。

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.in ,并且setuptools将忽略测试文件:

global-exclude *_test.py

也可以看看

您可以将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',
    ]

其他插件如上面使用的插件可用于bzrdarcsmonotonemercurial等。

提示:

不要忘记运行以下命令来清理构建目录python setup.py clean --all bdist_wheel

如果您使用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',
        ...
    }
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM