setuptools将文件包含在顶级目录中

时间:2018-03-20 10:11:03

标签: python python-3.x setuptools

任务很简单:我有一个扩展名不是py的文件,需要随包一起分发。出于此示例的目的,我们将其称为.config.json

我尝试将其放入MANIFEST.in作为include .config.json - 这没有效果。

我尝试了package_data={'': ['.config.json']} - 这也没有效果。

我也尝试了data_files=[('', '.config.json')] - 这打破了无关的错误:error: can't copy '.': doesn't exist or not a regular file

如果不是自己编写构建命令,我找不到任何可以使其工作的东西。并且,是的,我已经在SO上看到了大量类似的问题,在bug跟踪器中的GitHub等等。我知道setuptoolsdistutils基本上都是无可救药地被打破了,但也许有一些使这项工作合理的方法?我无法相信这个简单的东西还没有解决......

根据要求,setup.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from setuptools import setup, find_packages


setup(
    name='project_name',
    version='0.1.0',
    description='Project Name in Caps',
    author='My Company',
    author_email=','.join(
        '{}@domain.com'.format(name) for name in
        list_of_names
    ),
    url='https://somewhere',
    packages=find_packages(),
    # package_data={
    #     '': ['.config.json'],
    # },
    # data_files=[('', '.config.json')],
    install_requires=[
        'pytest >= 3.4.2',
        ...
    ],
)

2 个答案:

答案 0 :(得分:1)

在`setup.py:

package_data={'package': ['../.config.json']}

这种方法的问题在于鸡蛋会将.config.json安装到site-packages/中,这几乎不是您想要的,当然不是用户对包装的期望。

PS。 MANIFEST.in没有帮助,因为它仅适用于源代码分发(python setup.py sdist)。

答案 1 :(得分:0)

data_files是您想要的,但您需要确保文件名包含在列表中:

data_files=[('', ['.config.json'])],

当我运行setup.py时,这对我有用。