[英]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_packages
和MANIFEST.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',
]
其他插件如上面使用的插件可用于bzr 、 darcs 、 monotone 、 mercurial等。
提示:
不要忘记运行以下命令来清理构建目录: 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.