setup.py是Python中用于构建、打包和发布第三方库的脚本文件。它通常位于Python库的根目录下,并包含了一些元数据和配置信息,用于指定库的名称、版本、作者、依赖项等。
setup.py的内容通常包括以下部分:
- 导入setuptools模块或distutils模块。setuptools是distutils的增强版,提供了更多的功能,比如支持打包和安装egg文件,自动下载依赖项等。
- 设置元数据,包括库的名称、版本、作者、描述、许可证等。这些元数据可以在PyPI(Python Package Index)上进行搜索和显示。
- 配置依赖项,包括需要安装的Python包、版本号等。这些依赖项会在安装库时自动下载和安装。
- 配置入口点,可以指定库的入口点,例如命令行工具。
- 配置打包选项,包括要包含的文件、文件类型、排除文件等。
- 执行打包操作,通常使用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