我知道您可以使用以下方法排除某些软件包:
packages = find_packages("src", exclude=["test"]),
是否也可以排除单个 python 文件? 我正在构建一个二进制轮,并希望排除我使用自定义函数“cythonized”的某些源文件:
python cythonize bdist_wheel
目前,我在使用自定义脚本构建轮子后删除了所有也包含 .so 库文件的 python 文件,我想使用 setup.py 来完成此操作。
py-docs 中有一篇模糊的(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
如果您使用 exclude_package_data
,您还可以使用 setup() 函数中的
include_package_data=True
关键字。
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',
...
}
)
您可以将
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