如何在setup.py脚本中包含许可文件?

2024-05-22 00:06:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在C++中编写了一个Python扩展模块。 我计划用setuptools分发这个模块。 将为32位和64位窗口(使用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文件没有定义任何包, 只有一个扩展模块。

我该怎么解决?


Tags: 模块文件frompyimporttxtfoolicense
3条回答

使用^{}

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

两句话:

  1. 您的产品不需要直接附带许可证,您可以使用distutils中的license metadata来指定这一点。

  2. 不要在代码中使用单引号和双引号:)

使用METADATA.in文件,许可证可以自动包含在源包和控制盘中:

元数据.in include README.md include COPYING

请查看以下示例: https://github.com/node40/smsh

写一个setup.cfg文件,并在其中指定:

[metadata]
license_files = LICENSE.txt

要使其工作,似乎需要安装车轮。即:

pip install wheel

如果您已经安装了wheel,但它不起作用,请尝试更新它:

pip install --upgrade wheel

然后,当通过pip install <path>安装包时,将包含许可证文件。

相关问题 更多 >