setuptools如何决定sdist/bdist保留哪些文件?

7 投票
1 回答
5151 浏览
提问于 2025-04-15 11:45

我正在开发一个Python包,使用了namespace_packagesfind_packages(),在setup.py文件里是这样写的:

from setuptools import setup, find_packages
setup(name="package",
    version="1.3.3.7",
    package=find_packages(),
    namespace_packages=['package'], ...)

这个包没有放在源代码管理里,因为它是一些上游组件的集合。并且没有MANIFEST文件。

当我运行python setup.py sdist时,我得到一个压缩包,里面包含了package/目录下大部分的文件,但任何不包含.py文件的目录都被忽略了。

那么,setup.py默认情况下是如何决定包含和排除哪些内容在构建的分发包中的呢?我通过添加一个MANIFEST.in文件来解决了我的问题,内容是:

recursive-include package *

但我想了解一下setuptools和distutils默认是怎么处理这些的。

1 个回答

4

你需要添加一个 package_data 指令。比如,如果你想包含 .txt 或 .rst 结尾的文件:

from setuptools import setup, find_packages
setup(name="package",
    version="1.3.3.7",
    package=find_packages(),
    include_package_data=True,
    namespace_packages=['package'], 
     package_data = {
        # If any package contains *.txt or *.rst files, include them:
        '': ['*.txt', '*.rst']...

)

撰写回答