Подтвердить что ты не робот

Как включить файл лицензии в setup.py script?

Я написал модуль расширения Python в С++. Я планирую распространить модуль с помощью setuptools. Будут бинарные дистрибутивы для 32- и 64-разрядных Windows (построены с setup.py bdist_egg) и исходный дистрибутив для UNIX-подобных платформ (построенных с помощью setup.py sdist).

Я планирую лицензировать модуль под лицензией BSD. В моем исходном дереве файл LICENSE.txt находится в верхней папке вместе с setup.py. Как включить его в установочный пакет?

Я попробовал следующую setup.py script:

from setuptools import setup, Extension
from glob import glob

setup(
    name = 'Foo',
    version = '0.1.0',
    ext_modules = [Extension('Foo', glob('Source/*.cpp'))],
    package_data = {'': ['LICENSE.txt']}
)

Это не сработало, файл лицензии не включен в установочный пакет. Возможно, потому что файл setup.py не определяет какие-либо пакеты, только один модуль расширения.

Как это исправить?

4b9b3361

Ответ 1

Используйте data_files:

setup(
    name = "Foo",
    version = "0.1.0",
    ext_modules = [Extension("Foo", glob("Source/*.cpp"))],
    data_files = [("", ["LICENSE.txt"])]
)

Два замечания:

  • Нет прямой необходимости отправлять лицензию на ваш продукт, вы можете использовать метаданные лицензии в distutils, чтобы указать это.

  • Не используйте смешанные одиночные кавычки и двойные кавычки в вашем коде:)

Ответ 2

Напишите файл setup.cfg и там укажите:

[metadata]
license_files = LICENSE.txt

Чтобы это работало, кажется, что необходимо установить колесо. То есть:

pip install wheel

Если у вас уже установлен wheel и он не работает, попробуйте обновить его:

pip install --upgrade wheel

Затем при установке пакета через pip install <path> включается файл LICENSE.

Ответ 3

Используя файл METADATA.in, лицензия может быть включена как в исходный пакет, так и в колеса автоматически:

METADATA.in include README.md include COPYING

Проверьте пример здесь:https://github.com/node40/smsh

Ответ 4

Например:

setup(
    ...
    license="ZPL",
    classifiers=[
        ...
        'License :: OSI Approved :: Zope Public License',
        ...
        ],
     ...)

дополнительно вы можете вставить свой текст лицензии в 'long_description':

setup(
    ...
    long_description="Package description. \nLicense Text",
    ...)