我知道你可以使用以下方法排除某些包裹:
packages = find_packages("src", exclude=["test"]),
是否也可以排除单个python文件? 我正在构建一个二进制轮,并希望排除某些源文件,这些文件我已经#cy; cython化了#34;使用自定义功能:
python cythonize bdist_wheel
目前,在使用自定义脚本构建滚轮之后,我删除了所有也包含.so库文件的python文件,我想用setup.py执行此操作。
答案 0 :(得分:8)
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
答案 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',
...
}
)