Joh*_*åde 24 python setuptools
我用C++编写了一个Python扩展模块.我打算用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']}
)
Run Code Online (Sandbox Code Playgroud)
它不起作用,许可证文件不包含在安装包中.也许是因为setup.py文件没有定义任何包,只有一个扩展模块.
我该如何解决?
Evg*_*423 19
从setuptools\xc2\xa042.0.0开始,您可以使用该license_files密钥指定要包含到发行版中的许可证文件列表。从 version\xc2\xa056.0.0 开始,它支持模式匹配,默认为(\'LICEN[CS]E*\', \'COPYING*\', \'NOTICE*\', \'AUTHORS*\').
请注意,由于实现 细节的原因,实际上不需要将此密钥放入setup.cfg文件中(正如另一个答案所暗示的那样)。setup()您可以将其作为函数的参数提供:
\n (在撰写本文时文档对此尚不清楚)
from setuptools import setup\n\nsetup(\n ...\n license_files = (\'LICENSE.txt\',),\n ...\n)\nRun Code Online (Sandbox Code Playgroud)\n另请注意,虽然这些文件将包含在二进制(轮)和源代码发行版中,但如果用户没有安装软件包,它们将不会与您的软件包一起安装在setup.py-stylewheel源代码发行版中!
\n为了确保许可证文件与您的软件包一起安装,您需要对安装脚本进行一些额外的修改:
from setuptools import setup\nfrom setuptools.command.egg_info import egg_info\n\n\nclass egg_info_ex(egg_info):\n """Includes license file into `.egg-info` folder."""\n\n def run(self):\n # don\'t duplicate license into `.egg-info` when building a distribution\n if not self.distribution.have_run.get(\'install\', True):\n # `install` command is in progress, copy license\n self.mkpath(self.egg_info)\n self.copy_file(\'LICENSE.txt\', self.egg_info)\n\n egg_info.run(self)\n\n\nsetup(\n ...\n license_files = (\'LICENSE.txt\',),\n cmdclass = {\'egg_info\': egg_info_ex},\n ...\n)\nRun Code Online (Sandbox Code Playgroud)\n如果您的项目是pyproject.toml-style 项目,并且您认为它将由 PEP\xc2\xa0517 兼容前端安装(例如pip>=19),则会从您的源中强制构建一个轮子,并且许可证文件将.dist-info自动安装到文件夹中。
从 version\xc2\xa061.0.0 开始,您可以在文件中指定项目元数据和其他配置选项pyproject.toml。
orl*_*rlp 17
用途data_files:
setup(
name = "Foo",
version = "0.1.0",
ext_modules = [Extension("Foo", glob("Source/*.cpp"))],
data_files = [("", ["LICENSE.txt"])]
)
Run Code Online (Sandbox Code Playgroud)
两个评论:
无需直接向您的产品发送许可证,您可以使用distutils中的许可证元数据来指定此项.
不要在代码中使用混合的单引号和双引号:)
编写一个setup.cfg文件,并在其中指定:
[metadata]
license_files = LICENSE.txt
Run Code Online (Sandbox Code Playgroud)
为此,似乎需要安装滚轮。那是:
[metadata]
license_files = LICENSE.txt
Run Code Online (Sandbox Code Playgroud)
如果您wheel已经安装但无法使用,请尝试更新它:
pip install wheel
Run Code Online (Sandbox Code Playgroud)
然后,当通过pip install <path>LICENSE文件安装软件包时,将包括在内。
Mak*_*cha -5
例如:
setup(
...
license="ZPL",
classifiers=[
...
'License :: OSI Approved :: Zope Public License',
...
],
...)
Run Code Online (Sandbox Code Playgroud)
此外,您可以将许可证文本插入“long_description”:
setup(
...
long_description="Package description. \nLicense Text",
...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8654 次 |
| 最近记录: |