2012-04-02 36 views
19

我已经在C++中编写了Python扩展模块。 我打算用setuptools来分发模块。 将有32位和64位Windows(使用setup.py bdist_egg构建)以及类似UNIX平台的源代码发布(使用setup.py sdist构建)的二进制发行版。如何在setup.py脚本中包含许可证文件?

我打算根据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文件没有定义任何包,只有一个扩展模块 。

我该如何解决这个问题?

回答

12

使用data_files

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

两个备注:

  1. 没有直接无需运送许可证与你的产品,你可以使用license metadata中的distutils注明。

  2. 不要使用混合单引号和双引号在你的代码:)

+0

“LICENSE.txt”应为[“LICENSE.txt”]。路径“/”是UNIX上的系统根目录,在Windows上不存在;当我在Windows上测试时,我收到了有关不存在的路径的错误消息。使用“”替代似乎工作;当我测试LICENSE.txt文件夹“C:\ Python27 \ Lib \ site-packages \ Foo-0.1.0-py2.7-win32.egg”时,文件夹与Foo.pyd相同 – user763305 2012-04-03 07:36:56

+0

@ user763305:I用你的评论编辑我的回答,对不起。如果我的答案解决了您的问题,请考虑将其标记为已接受,方法是单击答案左侧的复选标记。 – orlp 2012-04-03 08:00:08

-1

例如:

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

还可以插入您的许可证文本“LONG_DESCRIPTION” :

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

如何在任何地方包含许可证_file_? – mbdevpl 2017-06-01 10:02:53

-1

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

[metadata] 
license_file = LICENSE.txt 
+1

无法正常工作.. – user 2018-02-13 18:31:00

+0

@user是的,我想它只是对于生成的轮子文件,即当你运行时:'python setup.py bdist_wheel' https://wheel.readthedocs.io/en/stable/#包括最许可证内式产生轮文件 – 2018-02-14 15:47:59