首页 > 编程语言 >Python | setup.py详解

Python | setup.py详解

时间:2023-07-23 19:44:24浏览次数:38  
标签:Python setup py 指定 参数 scripts test

setup.py是Python中用于构建、打包和发布第三方库的脚本文件。它通常位于Python库的根目录下,并包含了一些元数据和配置信息,用于指定库的名称、版本、作者、依赖项等。

setup.py的内容通常包括以下部分:

  1. 导入setuptools模块或distutils模块。setuptools是distutils的增强版,提供了更多的功能,比如支持打包和安装egg文件,自动下载依赖项等。
  2. 设置元数据,包括库的名称、版本、作者、描述、许可证等。这些元数据可以在PyPI(Python Package Index)上进行搜索和显示。
  3. 配置依赖项,包括需要安装的Python包、版本号等。这些依赖项会在安装库时自动下载和安装。
  4. 配置入口点,可以指定库的入口点,例如命令行工具。
  5. 配置打包选项,包括要包含的文件、文件类型、排除文件等。
  6. 执行打包操作,通常使用setuptools提供的setup函数。

导入依赖包

1、setuptools包(主要)

from setuptools import setup, find_packages

2、unittest

import unittest

3、codecs

import codecs

setup函数讲解

  • name参数:必选参数,指定库的名称。
name='subword_nmt',
  • version参数:必选参数,指定库的版本号。
version='0.3.8',
  • description参数:可选参数,指定库的简短描述。
description='Unsupervised Word Segmentation for Neural Machine Translation and Text Generation',
  • long_description参数:可选参数,指定库的详细描述。
long_description=(codecs.open("README.md", encoding='utf-8').read() +
                      "\n\n" + codecs.open("CHANGELOG.md", encoding='utf-8').read()),

在这段代码中,使用了Python的codecs模块打开了README.md和CHANGELOG.md文件,并使用utf-8编码读取文件内容。然后,将这两个文件的内容通过字符串拼接的方式合并为一个字符串,并添加了一个换行符作为分隔符。

最终生成的字符串就是库的详细描述,它包含了README.md和CHANGELOG.md文件的内容,方便用户了解库的详细信息。需要注意的是,README.md和CHANGELOG.md文件需要和setup.py文件处于同一目录下。如果你使用其他的文件名或文件路径,需要相应地修改代码。

  • long_description_content_type参数:可选参数,用于指定long_description参数中所包含的文本的类型,通常是一个MIME类型。
long_description_content_type="text/markdown",

这个参数的作用是告诉Python解释器如何解析long_description参数中的文本。如果不指定这个参数,Python解释器会尝试根据文件扩展名来猜测文本类型,但这可能不准确。

常用的long_description_content_type类型包括:

  • text/plain:纯文本格式。
  • text/markdown:Markdown格式。
  • text/x-rst:reStructuredText(RST)格式。
  • text/html:HTML格式。

这样,Python解释器就会正确地解析Markdown格式的文本,并将其显示在PyPI(Python Package Index)上。

  • url参数:可选参数,指定库的主页网址。
url='https://github.com/rsennrich/subword-nmt',
  • author参数:可选参数,指定库的作者名称。
author='Rico Sennrich',
  • author_email参数:可选参数,指定库作者的电子邮件地址。
author_email="[email protected]",
  • license参数:可选参数,指定库的许可证类型。
license='MIT',
  • test_suite参数:可选参数,用于指定库测试的主函数,通常是一个字符串,指定测试模块的名称或路径。
test_suite='setup.test_suite',
def test_suite():
    test_loader = unittest.TestLoader()
    test_suite = test_loader.discover('subword_nmt/tests', pattern='test_*.py')

    return test_suite

这段代码定义了一个用于运行测试的主函数test_suite,它使用了Python内置的unittest模块来运行测试。

首先,我们创建了一个TestLoader对象test_loader,它用于加载测试用例。然后,使用test_loader.discover方法来查找指定目录下的测试用例,这里指定了'subword_nmt/tests'目录,并使用通配符模式'test_*.py'来匹配所有以'test_'开头、以'.py'结尾的测试模块。discover方法会递归查找子目录,并返回一个包含所有测试用例的TestSuite对象。

最后,我们将返回的TestSuite对象赋值给test_suite变量,并将其作为主函数的返回值,用于运行所有测试用例。

  • classifiers参数:可选参数,指定库的分类,比如开发状态、支持的Python版本、许可证等。
classifiers=[
    'Intended Audience :: Developers',
    'Topic :: Text Processing',
    'Topic :: Scientific/Engineering :: Artificial Intelligence',
    'License :: OSI Approved :: MIT License',
    'Programming Language :: Python :: 2',
    'Programming Language :: Python :: 3',
    ],

这些标签可以帮助用户更方便地搜索和过滤库,也可以帮助开发者更好地了解库的用途和特性。

classifiers参数通常是一个包含多个字符串的列表,每个字符串表示一个分类标签,格式为'category :: subcategory'。其中,category表示主要分类,例如Intended Audience、Topic、License等;subcategory表示子分类,例如Developers、Text Processing、Artificial Intelligence等。

在这个示例中,我们指定了以下几个分类标签:

  • Intended Audience :: Developers:开发人员。
  • Topic :: Text Processing:文本处理。
  • Topic :: Scientific/Engineering :: Artificial Intelligence:科学/工程:人工智能。
  • License :: OSI Approved :: MIT License:MIT许可证。
  • Programming Language :: Python :: 2:Python 2.x系列。
  • Programming Language :: Python :: 3:Python 3.x系列。

这些分类标签可以帮助用户更方便地搜索和过滤库,例如,用户可以通过pypi.org网站上的分类标签来查找和筛选库,也可以通过pip install命令中的分类标签来安装特定类型的库。

  • install_requires参数:可选参数,指定库的依赖项,这些依赖项会在安装库时自动下载和安装。
install_requires=['mock',
                  'tqdm'],
  • packages参数:可选参数,指定要包含的Python包。
packages=find_packages(),

这段代码使用了setuptools库中的find_packages函数,用于查找和获取当前项目中的所有Python包。

find_packages函数会在当前目录以及其子目录中查找包含__init__.py文件的目录,并返回一个包含所有找到的包名称的列表。这个函数通常用于自动发现和包含所有Python包,无需手动列出每个包的名称。

  • entry_points参数:可选参数,指定库的入口点,例如命令行工具,这些入口点可以在安装库时添加到系统路径中。
entry_points={
        'console_scripts': ['subword-nmt=subword_nmt.subword_nmt:main'],
    },
  • include_package_data参数:可选参数,指定是否包含所有包含在MANIFEST.in文件中的非Python文件。
include_package_data=True
  • scripts参数:可选参数,用于指定要安装的可执行脚本。
scripts=[
    "thumt/scripts/average_checkpoints.py",
    "thumt/scripts/build_vocab.py",
    "thumt/scripts/convert_checkpoint.py",
    "thumt/scripts/shuffle_corpus.py"],

scripts参数通常是一个包含多个字符串的列表,每个字符串表示一个可执行脚本的路径。在安装时,这些脚本会被复制到Python的可执行目录(例如/usr/local/bin或C:\Python27\Scripts)下,用户可以在命令行中直接调用这些脚本来执行相应的操作

在这个示例中,我们指定了以下几个可执行脚本:

  • thumt/scripts/average_checkpoints.py:用于平均多个模型的参数。
  • thumt/scripts/build_vocab.py:用于构建词汇表。
  • thumt/scripts/convert_checkpoint.py:用于将模型的参数从一个格式转换为另一个格式。
  • thumt/scripts/shuffle_corpus.py:用于随机打乱语料库。

这些脚本可以方便用户进行一些常用的操作,可以通过命令行调用,例如:

average_checkpoints.py --inputs checkpoint1,checkpoint2 --num-avg 2 --output averaged_checkpoint

这个命令会读取两个检查点文件checkpoint1和checkpoint2,对它们的参数进行平均,并将结果保存到averaged_checkpoint文件中。

需要注意的是,scripts参数只能用于安装可执行脚本,不能用于安装Python模块或包。如果要安装Python模块或包,需要使用packages参数或者py_modules参数。

标签:Python,setup,py,指定,参数,scripts,test
From: https://www.cnblogs.com/zhangxuegold/p/17575771.html

相关文章

  • ANSI编码的csv文件python怎么读取
    ANSI编码的csv文件python怎么读取在使用Python读取CSV文件时,常见的文件编码格式有UTF-8、GBK等,但有时我们可能会遇到一些使用ANSI编码的CSV文件,这会导致读取文件时出现乱码问题。问题描述假设我们有一个使用ANSI编码的CSV文件,我们希望能够正确地读取其中的数据,并进行后续的处理......
  • 6-4 整数数位和(高教社,《Python编程基础及应用》习题8-3)
    6-4整数数位和在计算机编程中,我们经常需要对数字进行各种操作和计算。其中,对一个整数进行数位和的计算是一个常见的需求。本文将介绍什么是整数的数位和,并给出一个用Python实现的计算数位和的示例代码。什么是整数的数位和整数的数位和是指将一个整数中每个数字相加的结果。例......
  • 3.7的python 应该安装什么版本的numpy
    3.7的Python应该安装什么版本的NumPyNumPy是一个用于Python的开源数学库,它提供了一个高效的多维数组对象以及用于处理这些数组的数学函数。在Python中进行科学计算和数据分析时,NumPy是不可或缺的工具之一。然而,由于Python的版本迭代更新,我们需要了解3.7版本的Python应该安装什么版......
  • 219个python源码云共享
    实现"219个python源码云共享"的过程:步骤操作代码说明1创建源码仓库gitinit初始化一个空的Git仓库2添加源码文件gitadd.将当前目录下的所有文件添加到Git仓库中3提交源码文件gitcommit-m"Initialcommit"提交所有添加的源码文件到Git仓库中4创......
  • anaconda是什么,是干嘛用的,与python的区别是什么?
    作者:python小达链接:https://www.zhihu.com/question/353409585/answer/1662315835来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Anaconda是一个用于科学计算的Python发行版,Anaconda支持Linux,Mac,Windows系统,提供了包管理与环境管理的功能,可......
  • Python【10】 类中的 _x __x __x__
    保护、私有、系统预定义参考:https://www.runoob.com/python/python-object.html总结细节......
  • Python【11】__getitem__ 魔术方法
    让方法能使用[key]返回值或做操作参考(侵删):https://blog.csdn.net/Norsaa/article/details/105564931......
  • python将xml文件转换为json
    转载自:如何使用Python实现XML转JSON-知乎(zhihu.com)代码:importosimportjsonimportxmltodictdefxml_to_JSON(xml):#格式转换try:convertJson=xmltodict.parse(xml,encoding='utf-8')jsonStr=json.dumps(convertJson,indent=1)......
  • Python【9】 @property
    Python内置的@property装饰器能把一个方法变成属性调用参考1:https://www.runoob.com/python/python-func-property.html参考2:https://www.liaoxuefeng.com/wiki/1016959663602400/1017502538658208......
  • Python时间复杂度是如何衡量的?
    Python时间复杂度是如何衡量的?在计算机科学中,时间复杂度是一种用来衡量算法执行时间的度量方式。它描述了算法执行时间随输入规模增长的变化情况。时间复杂度通常用大O表示法来表示,表示算法的运行时间与输入规模的关系。在Python中,我们可以使用一些工具来计算算法的时间复杂度,例......