python setuptools 学习

转载一个操作的例子: https://www.cnblogs.com/anliven/p/9840583.html

 

太多了,直接官网看介绍吧

下载和官网: https://pypi.org/project/setuptools/

文档:https://setuptools.readthedocs.io/en/latest/

另外一个没使用: https://pypi.org/project/setuptools-scm/

Setuptools是Python的增强功能集合distutils ,允许开发人员更轻松地构建和分发Python包,尤其是那些依赖于其他包的包。

使用setuptools基于的普通Python包对用户进行构建和分发的包distutils。您的用户无需安装甚至不需要了解setuptools即可使用它们,并且您不必在发行版中包含整个setuptools包。通过仅包含一个引导程序模块(12K .py文件),setuptools如果用户从源代码构建程序包并且尚未安装合适的版本,则程序包将自动下载并安装。

特色亮点:

  • 使用EasyInstall工具在构建时自动查找/下载/安装/升级依赖项,该工具支持通过HTTP,FTP,Subversion和SourceForge进行下载,并自动扫描从PyPI链接的网页以查找下载链接。(这是目前最适合Python的CPAN。)
  • 创建Python Eggs - 单文件可导入的分发格式
  • 增强了对访问压缩包中托管的数据文件的支持。
  • 自动包含源树中的所有包,而不在setup.py中单独列出它们
  • 自动包含源分发中的所有相关文件,无需创建MANIFEST.in文件,也无需MANIFEST在源树更改时强制重新生成文件。
  • 自动为项目中的任意数量的“主要”功能生成包装器脚本或Windows(控制台和GUI).exe文件。(注意:这不是py2exe替换; .exe文件依赖于本地Python安装。)
  • 透明的Cython支持,这样你的setup.py可以列出.pyx文件,即使最终用户没有安装Cython也可以工作(只要你在源代码发行版中包含Cython生成的C)
  • 命令别名 - 为常用命令和选项创建项目特定,每用户或站点范围的快捷方式名称
  • 以“开发模式”部署项目,使其可用 sys.path,但仍可直接从其源检出中进行编辑。
  • 使用新命令或setup()参数轻松扩展distutils ,并为多个项目分发/重用扩展,而无需复制代码。
  • 使用项目设置脚本中声明的简单“入口点”,创建可自动发现扩展的可扩展应用程序和框架。
  • 完全支持PEP 420 via find_namespace_packages(),它也向后兼容find_packages()Python> = 3.3 的现有版本。

基本用法

对于setuptools的基本使用,只需从setuptools而不是distutils导入东西。这是使用setuptools的最小设置脚本:

  1.  
    from setuptools import setup, find_packages
  2.  
    setup(
  3.  
    name="HelloWorld",
  4.  
    version="0.1",
  5.  
    packages=find_packages(),
  6.  
    )

调用该脚本以生成分发,并自动包含setup.py所在目录中的所有包。请参阅下面的“ 命令参考”部分,了解可以为此安装脚本提供的命令。例如,要生成源代码分发,只需调用:

python setup.py sdist

新的和更改的setup()关键字

setup()添加或更改 以下关键字参数setuptools。所有这些都是可选的; 除非您需要相关setuptools功能,否则不必提供它们。

include_package_data

如果设置为True,则告诉setuptools它自动包含它在您的MANIFEST.in文件指定的包目录中找到的任何数据文件。有关更多信息,请参阅下面有关包含数据文件的部分 。

exclude_package_data

将包名称映射到应从包目录中排除的glob模式列表的字典。您可以使用它来修剪包含的任何多余文件include_package_data。有关完整说明和示例,请参阅下面有关包含数据文件的部分。

package_data

将包名称映射到glob模式列表的字典。有关完整说明和示例,请参阅下面有关包含数据文件的部分。如果您正在使用include_package_data,则不需要使用此选项 ,除非您需要添加由安装脚本和构建过程生成的文件。(因此不在源代码管理中,或者是您不希望包含在源代码分发中的文件。)

zip_safe

一个布尔(True或False)标志,指定项目是否可以安全地安装并从zip文件运行。如果未提供此参数,则bdist_egg每次构建一个egg时,该命令都必须分析所有项目的内容以查找可能的问题。

install_requires

一个字符串或字符串列表,指定在此时需要安装的其他发行版。有关此参数格式的详细信息和示例,请参阅下面有关声明依赖关系的部分。

entry_points

将入口点组名称映射到字符串或定义入口点的字符串列表的字典。入口点用于支持项目提供的服务或插件的动态发现。有关此参数格式的详细信息和示例,请参阅服务和插件的动态发现。此外,此关键字用于支持自动脚本创建

extras_require

将“extras”(项目的可选功能)的名称映射到字符串或字符串列表的字典,指定必须安装哪些其他发行版才能支持这些功能。有关此参数格式的详细信息和示例,请参阅下面有关声明依赖关系的部分。

python_requires

对应于Python版本的版本说明符(如PEP 440中所定义)的字符串,用于指定PEP 345中定义的Requires-Python。

setup_requires

字符串或字符串列表,指定需要存在的其他分发以便运行安装脚本。 在处理其余的安装脚本或命令之前,setuptools将尝试获取这些(甚至可以下载它们 EasyInstall)。如果您在构建过程中使用distutils扩展,则需要此参数; 例如,处理setup()参数并将它们转换为EGG-INFO元数据文件的扩展。

(注意:列出的项目setup_requires不会自动安装在运行安装脚本的系统上。如果它们本地不可用,则只需将它们下载到./.egs目录。如果要安装它们,以及在运行安装脚本时可用,您应该将它们添加到install_requires 和 setup_requires。)

dependency_links

在满足依赖关系时命名要搜索的URL的字符串列表。如果需要安装由setup_requires或指定的包,将使用这些链接tests_require。它们也将被写入egg的元数据,供EasyInstall等工具在安装.egg文件时使用。

namespace_packages

命名项目“命名空间包”的字符串列表。命名空间包是可以跨多个项目分发拆分的包。例如,Zope 3的zope包是一个名称空间包,因为子包类似zope.interface并且zope.publisher 可以单独分发。鸡蛋运行时系统可以这样子包自动合并成在运行一个父包,只要您在包含命名空间封装的任何子包每个项目申报他们,只要命名空间封装的__init__.py 不包含比其他任何代码名称空间声明 有关更多信息,请参阅下面有关命名空间包的部分。

test_suite

一个字符串,用于命名unittest.TestCase子类(或包含其中一个或多个的包或模块,或此类子类的方法),或命名一个可以不带参数调用的函数并返回一个 unittest.TestSuite。如果命名套件是一个模块,并且模块有一个additional_tests()函数,则调用它并将结果添加到要运行的测试中。如果命名套件是一个包,则任何子模块和子包都以递归方式添加到整个测试套件中。

指定此参数可以使用test命令运行指定的测试套件,例如通过。有关详细信息,请参阅下面的测试命令部分 。setup.py test

tests_require

如果项目的测试需要一个或多个附加软件包,除了安装它们之外,还可以使用此选项来指定它们。它应该是一个字符串或字符串列表,指定要运行的包测试需要提供的其他发行版。当您运行该test 命令时,setuptools将尝试获取这些命令(甚至可以使用它来下载它们EasyInstall)。请注意,这些必需的项目不会安装在运行测试的系统上,但只有在本地尚未安装的情况下才会下载到项目的安装目录中。

test_loader

如果您想使用与setuptools通常使用的不同的查找运行方式,可以在此参数中指定模块名称和类名称。命名类必须是可实例化的,不带参数,并且其实例必须支持loadTestsFromNames()Python unittest模块TestLoader类中定义的方法。Setuptools只会在names参数中传递一个测试“name” :为参数提供的值test_suite。您指定的加载器可以以任何方式解释此字符串,因为对test_suite字符串中可能包含的内容没有限制。

模块名称和类名必须用a分隔:。该参数的默认值为"setuptools.command.test:ScanningLoader"。如果要使用默认unittest行为,则可以指定 "unittest:TestLoader"test_loader参数。这将阻止子模块和子包的自动扫描。

您在此处指定的模块和类可能包含在另一个包中,只要您使用该tests_require选项以确保在test运行该命令时包含加载程序类的包可用。

eager_resources

应该一起提取的命名资源的字符串列表,如果需要它们中的任何一个,或者是否导入了项目中包含的任何C扩展。仅当项目将作为zip文件安装时,此参数才有用,并且需要将所有列出的资源作为一个单元提取到文件系统。此处列出的资源应为'/' - 相对于源根的分隔路径,因此要foo.png在包中列出资源bar.baz,您应bar/baz/foo.png在此参数中包含该字符串 。

如果您只需要一次获取一个资源,或者您没有任何C扩展来访问项目中的其他文件(例如数据文件或共享库),您可能不需要这个参数而且不应该弄乱用它。有关此参数如何工作的更多详细信息,请参阅下面有关自动资源提取的部分。

use_2to3

在构建过程中,使用2to3将源代码从Python 2转换为Python 3。有关更多详细信息,请参阅使用Setuptools支持Python 2和Python 3

convert_2to3_doctests

需要使用2to3转换的doctest源文件列表。有关更多详细信息,请参阅使用Setuptools支持Python 2和Python 3

use_2to3_fixers

用于搜索在2to3转换期间使用的其他修复程序的模块列表。有关更多详细信息,请参阅使用Setuptools支持Python 2和Python 3

project_urls

URL名称到超链接的任意映射,允许更多可扩展的文档记录可以找到的各种资源,而不是简单 urldownload_url选项。

使用find_packages()

对于简单的项目,通常很容易手动将包添加到packages参数中setup()。但是,对于非常大的项目(Twisted,PEAK,Zope,Chandler等),保持包列表更新可能是一个很大的负担。这setuptools.find_packages()是为了什么。

find_packages()获取源目录和两个包名称模式列表以排除和包含。如果省略,源目录默认为与安装脚本相同的目录。有些项目使用srclib 目录作为源树的根,这些项目当然会使用"src""lib"作为第一个参数find_packages()。(而且这些项目也需要类似于package_dir={'':'src'}他们的 setup()论点,但这只是一个正常的事情。)

无论如何,find_packages()遍历目标目录,按包含模式过滤,并找到Python包(任何目录)。只有包含__init__.py文件时才会识别包。最后,应用排除模式来删除匹配的包。

包含和排除模式是包名称,可选地包括通配符。例如,find_packages(exclude=["*.tests"])将排除其姓氏为的所有包tests。或者,也将排除所有已命名的软件包子包,但它仍然不会排除顶级软件包或其子代。事实上,如果你真的不想要任何包,你需要这样的东西:find_packages(exclude=["*.tests", "*.tests.*"])teststeststests

find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"])

posted on 2020-03-19 15:36  不要挡着我晒太阳  阅读(1086)  评论(0编辑  收藏  举报

导航