Как включить файл лицензии в скрипт setup.py? - PullRequest
22 голосов
/ 02 апреля 2012

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

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

Я попробовал следующий скрипт setup.py:

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 не определяет какие-либо пакеты, только один модуль расширения.

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

Ответы [ 4 ]

15 голосов
/ 02 апреля 2012

Использование data_files:

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

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

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

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

5 голосов
/ 08 февраля 2018

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

[metadata]
license_file = LICENSE.txt

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

pip install wheel

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

2 голосов
/ 06 апреля 2018

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

METADATA.in include README.md include COPYING

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

0 голосов
/ 02 апреля 2012

Например:

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

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

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