实例 1 click.command() 将一个函数装饰成命令行接口 import click @click.command() def hello(): click.echo("Hello...参数在 help 输出中有完整的文档,argument 则没有; ?...实例3 Click 支持使用 setuptools 来更好的实现命令行程序打包,把源码文件打包成系统中的可执行程序,并且不限平台。...hello.py的代码如下: def cli(): print("Hello World") setup.py的代码如下: from setuptools import setup setup...', ], entry_points=''' [console_scripts] myhello=hello:cli ''', ) 然后在当前路径执行
python setup.py 浅析 setuptools.setup() 参数说明 packages 对于所有 packages 列表里提到的纯 Python 模块做处理 需要在 setup 脚本里有一个包名到目录的映射...packages = ['foo', 'foo.bar'] 告诉 distutils 去寻找 lib/__init__.py 和 lib/bar/__init__.py. py_modules 对于一个相对较小的模块的发布...,你可能更想要列出所有模块而不是列出所有的包,尤其是对于那种根目录下就是一个简单模块的类型....这描述了两个包,一个在根目录下,另一个则在 pkg 目录下。 默认的“包:目录”映射关系表明你可以在 setup 脚本所在的路径下找到 mod1.py 和 pkg/mod2.py。...': ['legit = legit.cli:cli',] 生成可执行控制台程序,程序名为 legit, 运行 legit.cli 中的 cli()函数。
但是我们拼凑起来的东西在大多数时候并不是一个完整的 CLI,您需要管理标志、解析参数、链接子命令等等,这很麻烦,因此会产生多个小的和不受管理的脚本。...您可以使用此文件作为参考来创建自己的 CLI: # setup.py """Package setup""" import setuptools # Development Requirements...entry_points={"console_scripts": ["to = tools:run"]}, 这to是我们的 CLI 的名称,您可以将其命名为任何您喜欢的名称。...如果你想给它命名,brr它会像这样: entry_points={"console_scripts": ["brr = tools:run"]}, tools:run代表我们模块的名称,后跟它需要运行的功能...控制台脚本总是需要一个函数才能运行,因此我们之前进行了修改。 感觉像 CLI ♂️ 现在让我们在虚拟环境中以可编辑模式安装 CLI。这就像 CLI 的热重载,您所做的任何更改都会立即反映出来。
Click 是一个用于快速创建命令行工具的 Python 支持库,Click 具有高度可配置性,使用非常少的代码就可以创造一个优雅的命令行工具,Click 使创建命令行工具变得快速而有趣。...Click 用来协助你生成各种各样的 CLI 工具。...使用 Click 的命令程序,最好是编写成使用 setuptools 分发的模块,下面我们在 Flask 应用中添加 setuptools 的支持。...', version='0.0.1', entry_points=""" [console_scripts] server=server.cli:server...模块引入的数据库管理软件,而 initdb 命令使今天我们使用 click 生成的命令。
假如我在本机开发一个程序,需要用到python的redis、mysql模块以及自己编写的redis_run.py模块。...一个例子:package_dir = {'': 'lib'},表示“root package”中的模块都在lib 目录中。...entry_points={'console_scripts': [ 'redis_run = RedisRun.redis_run:main',]}这里可以有多条记录,这样一个项目就可以制作多个命令行工具了...(此时RedisRun模块是DrQueue模块的子模块,这是因为要导入某些公用的模块)#!...参考文献:python安装模块如何通过setup.py安装(超简单)使用setup.py安装python包和卸载python包的方法python下setuptools的安装详解及No module named
),语言的生态(如:依赖管理和包发布等)和工具(编辑器,编译器或者解释器)这些方面,请参看如何高效地学习编程语言。...│ └── setuptools-39.0.1.dist-info └── pyvenv.cfg 进入虚拟环境,然后使用pip3安装pytest测试模块,会发现venv目录多了些东西...根据约定,测试文件的名称必须以test_开头,如test_pytree.py,测试方法也必须如此,如test_fix_me。...=[] ) setup.py能帮助我们解决测试中依赖模块的问题,这样我们把pytree作为一个package引入到测试代码中。...# setup.py entry_points = { 'console_scripts': [ 'pytree = pytree.cli:main' #
什么是setuptools setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。...用户在使用setuptools创建的包时,并不需要已安装setuptools,只要一个启动模块即可。...创建一个简单的包 有了setuptools后,创建一个包基本上是无脑操作 cd /tmp mkdir demo cd demo 在demo中创建一个setup.py文件,写入 from setuptools..."]) 使用entry_points 一个字典,从entry point组名映射道一个表示entry point的字符串或字符串列表。...别的应用使用的方法是通过pkg_resources.require()来导入这些模块。 另外,一个名叫stevedore的库将这个方式做了封装,更加方便进行应用的扩展。
包在开发中十分常见,一般的使用套路是所有的功能做一个python模块包,打包模块,然后发布,安装使用。...另外有一个记录文件MANIFEST。 四、安装模块 hello_module-1.0.tar.gz 是生成的python模块。切换到的我的python虚拟环境中,安装该模块。...模块就是hello.py文件,引用hello.py文件中的hello_fun()函数。 setuptools setuptools是distutils的增强版。...setuptools有一个entry_points功能很方便,类似linux启动某个服务,如在linux命令行里firefox能启动火狐浏览器。首先检验没有安装之前,命令path没有作用。...setuptools的进阶使用 上面使用setuptools时只是简单的用一个配置文件setup.py就完成了打包信息填写。在真实的开发环境中,往往是多个文件配合。以openstack的打包为例。
第一个简单的 Python 包:snek 我作为技术合伙人兼任CTO与其他人合伙成立了一家软件公司。软件公司的第一个 Python 产品名为 snek,这个软件可以在屏幕上画出一条蛇。...setup.py 中还有一个重要的功能:它可以用于注册 entry_points 。后面会用代码来解释 entry_points 到底是干嘛的。...from setuptools import setup setup( name='snek', entry_points={ 'console_scripts': [...from setuptools import setup setup( name='cute_snek', entry_points={ 'snek_types': [...有一种特殊的 entry_points ,名为 console_scripts。在这里注册的内容可以直接被集成为命令行工具。
用户在使用setuptools创建的包时,并不需要已安装setuptools,只要一个启动模块即可。...有了setuptools后,创建一个包基本上是无脑操作 cd /tmp mkdir demo cd demo 在demo中创建一个setup.py文件,写入 from setuptools import....*", "tests"]) 使用entry_points 一个字典,从entry point组名映射到一个表示entry point的字符串或字符串列表。...别的应用使用的方法是通过pkg_resources.require()来导入这些模块。 另外,一个名叫stevedore的库将这个方式做了封装,更加方便进行应用的扩展。...setuptools会先检查本地有没有符合要求的依赖包,如果没有的话,就会从PyPI中获得一个符合条件的最新的包安装到本地。
={ "console_scripts": ["mybin=mypackage.main:cli"] } ) 或者 ini 写法 setup( entry_points=..."""[console_scripts] mybin = mypackage.main:cli """ ) 任选其一。...dist-info/目录,包含这个包的元数据信息,比如有哪些文件、文件 hash 值、entry_points 等等。...setuptools 不再是唯一的选择 PEP 517 的内容简单来说,就是在项目根目录下的pyproject.toml定义了两个特殊属性1: [build-system] requires = ["setuptools...>= 40.8.0", "wheel"] build-backend = "setuptools.build_meta:__legacy__" 上面这个就是setuptools的 PEP 517 的配置
如今他把这个摸鱼做成了一个Python库,关于这个库的使用之前已经发布了文章,可以前往:盘点一个名为摸鱼的Python库,一起来摸鱼吧!...() click 库的使用 注意到我们上面的文件代码用到了 click 库。...Python 内置了一个 Argparse 的标准库用于创建命令行, 但使用起来有些繁琐,Click 相比于 Argparse 可谓是小巫见大巫了。...安装 pip install click click 的简单使用 官方文档的入门例子: import click @click.command() @click.option('--count'...@click.option 的第一个参数指定了命令行选项的名称。 click.echo 方法和 python 内置的 print 方法相似。 使用方法: 打印 10 个 皮老板。
,将包的 __version__.py 模块加载进来 about = {} if not VERSION: with open(os.path.join(here, NAME, '__version...,setuptools可以自动搜索__init__.py文件来找到包 packages=find_packages(exclude=('tests',)), # 如果项目中包含任何不在包中的单文件模块...,需要添加py_modules让setuptools能找到它们: # py_modules=['yitian_first_package'], # entry_points={...data_files=[('my_data', ['data/data_file'])], entry_points entry_points参数指定一些入口点,可以看做是项目提供的一些额外功能,其中最常见的就是...setuptools提供的工具链可以在安装项目分发包的时候将这些接口转化为真正的可执行脚本,更多信息参考setuptools文档 - Automatic Script Creation。
今天就来说一说Python的第三方包的打包与发布流程! 打包 想要发布一个第三方的包,首先你得有一个需要发布的项目。这个项目可以完成任何有意义的事情。...比如:今天的样例就是一个Python的测试报告第三方库。 当我们把功能模块已经实现好之后,就可以按照python打包的目录结构要求来搭建了。...具体步骤为: 新建一个目录作为根目录 把功能模块以Python包的形式放入根目录 在根目录中创建setup.py文件,并填写相应内容 在根目录创建其它描述文件,如:LISENCE,README等 这里以...其中最重要的是setup.py文件,而这个项目的功能模块就是pytestreport这个包。接下来最重要的就是如何编写setup.py文件。...packages:需要打包的Python包目录;注意如果有子包则必须显式的列出来,如:pytestreport.api data_files:需要打包的非.py文件; entry_points:指定安装包之后的程序入口脚本
,再加上一些后续的处理(wheel文件解压之后有两个子文件夹,一个代码文件夹,一个包发行说明文件夹,需要再进行一下文件夹的移动),我写了一个简单的添加pypi库的命令scf-add(https://github.com...TIM截图20180521084027.png TIM截图20180521084134.png 解决方案 开发一个命令行工具,选用一个合适的辅助库是很关键的,毕竟只用argparse还是有点麻烦,我选择了...flask-cli使用的click库,可以方便的通过装饰器编写命令行应用,一个来自官方文档的示例是这样的。...import click @click.command() @click.option('--count', default=1, help='Number of greetings.')...entry_points={ 'console_scripts': ['scf-add=scf_add:main'], }, #... ) 安装和使用 pip直接安装 pip install
文件模版,示例如下: include xx.txt include yy/xx.txt .... 2.bdist_egg:用来创建一个二进制分发版本,经常用来替代基于bdist生成的模式 3.install...另外,他还可能会安装在setup.py中的install_requires定义的相关模块,例如: install_requires=['...','...']删除一个包:1)删除这个包所创建的文件,...www.2cto.com 4.develop:编译并且在适当的位置安装包,然后添加一个简单的链接到python site-packages文件夹中,可以使用显式的-u选项删除包,例如: python...setup.py develop python setup.py develop -u 使用该方式比其他方式安装包更好一些5.创建一个新命令:这是由setuptools引入的,是一种将包定义为插件的简单方法...,示例: ...entry_points=''' [distutils.commands] my_command=my.command.module.Class
entry_points={ "console_scripts": ["mycli = mypackage.cli:main"] } ... ) 这里的console_scripts...其实就是最常用的一种载入点类型,包安装器会找到这个载入点将对应的命令行入口对象生成为一个命令行脚本。...原理就在 Python 的site模块中,看看它的官方文档: A path configuration file(.pth) is a file whose name has the form name.pth...使用安装即生效插件的项目 Flask CLI 相比于上一篇文章写的 Flask 扩展方法,可能更少的人知道 Flask 还可以安装即生效的方法,安装额外的命令。...entry_points={ "flask.command": ["foo = mypackage.cli:main"] } ... ) 安装完这个包以后,你就可以用flask
setuptools的使用方式和disutils差不多,也是以一个setup函数作为入口,只不过该函数来自于setuptools模块,而且支持更多的参数,比如classifiers, setup_requires...pbr (Python Build Reasonableness) pbr是一个setuptools的扩展工具,被开发出来的主要目的是为了方便使用setuptools,其项目文档地址也在OpenStack...main # 下面是其他entry_points内容,主要用于指定不同功能的扩展,和打包无关。...你可以在PyPI上找到完整的classifier值列表,地址是:https://pypi.python.org/pypi?%3Aaction=list_classifiers。...软件包的安装 安装工具 上面已经提到了,setuptools项目提供了一个软件包安装工具*esay_install。
在本教程的最后,你会知道: 为什么click相比于argparse和optparse来说是一个更好的选择 如何用它创建一个简单的CLI 如何将强制命令行参数添加到您的脚本 如何解析命令行标志和选项 如何通过添加帮助...例如,click是这个命令中的参数:pip install click。 2.或者它可以是一个选项,它是一个可选的(||)参数,结合名称和值部分,如--cache-dir ./my-cache。...通过Click构建一个简单的Python命令行界面 我已经谈了很多CLI和框架。我们来看看用click来构建一个简单的CLI是什么意思。...以下是你所学到的: 为什么click是一个更好的选择相对argparse和optparse 如何用它创建一个简单的CLI 如何将强制命令行参数添加到您的脚本 如何解析命令行标志和选项; 如何通过添加帮助...下面的完整代码示例说明了这一点。你可以自由地使用它来做你自己的实验 ? 如果这启发了你,你应该看看click官方文档以获得更多的功能。
同样是任务自动化工具,invoke 与我们之前介绍过的 tox/nox 在侧重点上有所不同: tox/nox 主要是在打包、测试、持续集成等方面的自动化(当然它们能做的还不止于此) invoke 则更具普遍性...3、 如何用好 invoke? 介绍完 invoke 的简单用法,我们知道了它所需的几项要素,也大致知道了它的使用步骤,接下来是它的其它用法。...例如,现在有多份 tasks.py,彼此是相对完整而独立的任务模块,不方便把所有内容都放在一个文件中,那么,如何有效地把它们整合起来管理呢? invoke 提供了这方面的支持。...3.5 作为命令行工具库 Python 中有不少好用的命令行工具库,比如标准库中的argparse、Flask 作者开源的click 与谷歌开源的fire 等等,而 invoke 也可以作为命令行工具库使用...4、小结 invoke 作为从 Fabric 项目中分离出来的独立项目,它自身具备一些完整而强大的功能,除了可用于开发命令行工具,它还是著名的任务自动化工具。
领取专属 10元无门槛券
手把手带您无忧上云