python setup.py sdist bdist_wheel manifest中包括用这个recursive-include 具体例子
时间: 2024-10-23 18:16:23 浏览: 32
在Python的`setup.py`文件中,`manifest.in`是一个用于指定在打包过程中应该包括哪些文件的清单文件。当你使用`recursive-include`时,它可以让你递归地包括特定路径下的文件,特别是当处理大型项目和子目录时非常有用。
`recursive-include
```
例如,如果你想在`src`目录及其所有子目录下包含`.txt`和`.md`文件,你应该这样写在`manifest.in`中:
```manifest.in
recursive-include src *.txt
recursive-include src *.md
```
然后在`setup.py`中指定包含这个清单:
```python
from setuptools import find_packages, setup
with open('MANIFEST.in', 'r') as f:
long_description = f.read()
setup(
include_package_data=True,
data_files=[('', [str(p) for p in glob.glob('MANIFEST.in')])], # 包含manifest.in
)
```
这样,当你运行`python setup.py sdist`或`bdist_wheel`时,会按照`manifest.in`中列出的规则递归地收集并打包文件。
相关问题
如何修改manifest.in文件, 使得 python setup.py bdist_wheel 产生的whl文件中不包含.py文件 只包含pyc文件
在Python项目中,`manifest.in`文件是一个控制哪些文件会被包含在wheel(`.whl`)打包中的文本文件。如果你想在生成的wheel中只包含`.pyc`文件而不包含`.py`源文件,你可以通过编写特定规则到`manifest.in`来实现。下面是一种简单的做法:
1. 首先,创建一个`manifest.in`文件(如果还没有的话),通常放在项目的根目录下。这是一个纯文本文件,每行定义一条规则。例如:
```
recursive-include *.pyc
exclude *.py
```
这里,`recursive-include`告诉`bdist_wheel`处理指定模式的所有子目录,`*.pyc`表示包括所有`.pyc`文件。而`exclude`则明确排除了所有`.py`文件。
2. 使用`python setup.py bdist_wheel`命令打包你的项目。这时,生成的`.whl`将只会包含你在`manifest.in`中指定的文件。
注意,这将保留源代码在`.whl`中,以便于开发者查看。然而,从生产环境部署的角度来看,通常会希望将源代码隐藏起来以减小体积。在这种情况下,你可以考虑使用更复杂的策略,比如使用专门的工具(如`auditwheel`)在安装时替换掉.pyc文件,但这超出了`manifest.in`的基本功能范围。
阅读全文