Как включить файл лицензии в 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 не определяет какие-либо пакеты,
только один модуль расширения.
Как это исправить?
Ответы
Ответ 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",
...)