MANIFEST.in、package_data和data_files的澄清?

32 投票
2 回答
8538 浏览
提问于 2025-04-17 13:16

我正在尝试创建一个Python包,目录结构如下:

mypkg/
├── __init__.py
├── module1
│   ├── x.py
│   ├── y.py
│   └── z.txt
└── module2
    ├── a.py
    └── b.py

然后我在 MANIFEST.in 文件中添加了所有的文件,当我检查创建的压缩包时,发现里面有所有的文件。

但是当我在 dist-packages/mypkg/module1 目录下运行 python setup.py install 时,我只看到了Python文件,而没有看到 z.txt

我在 MANIFEST.insetup.py 中都添加了 z.txt

setup (
    packages = [
        'mypkg',
        'mypkg.module1',
        'mypkg.module2',
    ],
    package_data = {
        'mypkg': ['module1/z.txt']
    },
    include_package_data = True, 
    ...
)

我也尝试把这个文件作为 data_files 添加,但这样会在 /usr/local 创建一个目录。我想把它保留在源代码目录里,因为代码需要用到这个数据。

我看过下面列出的帖子,但我还是搞不清楚在运行 setup.py install 后,怎么才能把 z.txt 放在正确的位置。

2 个回答

14

试试用setuptools,别用distutils。

2

更新:当我开始使用setuptools而不是distutils.core时,问题解决了。我觉得是distutils和manifest之间有些不兼容,而setuptools在代码没有任何变化的情况下就能正常工作。我建议以后使用setuptools。可以通过这个链接了解更多信息:setup tools- 开发者指南

撰写回答